MySQL8.0入门-数据库基本操作.md

登录MYSQL

mysql -h hostname -u username -p

添加环境变量

C:\Program Files\MySQL\MySQL Server 8.0\bin添加到环境变量中,这样就可以在命令行直接输入mysql命令登录数据库。

数据库基本操作

查看数据库

使用“SHOW DATABASES;”语句来查看当前所有存在的数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
6 rows in set (0.01 sec)

数据库列表中包含了6个数据库,MySQL是必需的,它描述用户访问权限,用户经常利用test数据库做测试的工作,其他数据库将会在后面介绍。

创建数据库

创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理,如果管理员在设置权限的时候为用户创建了数据库,则可以直接使用,否则需要自己创建数据库。

创建数据库的语法:

create database database_name;

删除数据库

删除数据库是将已经存在的数据库从磁盘空间上清除,清除之后,数据库中的所有数据也将一同被删除。

删除数据库的语法:

drop database database_name;

MySQL8.0的新特性——系统表全部为InnoDB表

MySQL 8.0开始,系统表全部换成事务型的InnoDB表,默认的MySQL实例将不包含任何MyISAM表,除非手动创建MyISAM表。

MySQL8.0查看系统表:

mysql> select distinct(engine) from information_schema.tables;
+--------------------+
| ENGINE             |
+--------------------+
| InnoDB             |
| NULL               |
| PERFORMANCE_SCHEMA |
| CSV                |
+--------------------+
4 rows in set (0.01 sec)

数据表的基本操作

在创建完数据库之后,接下来的工作就是创建数据表。所谓创建数据表,指的是在已经创建好的数据库中建立新表。创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性等)约束的过程。

创建表的语法

数据表属于数据库,在创建数据表之前,应该使用语句USE <数据库名>指定操作是在哪个数据库中进行,如果没有选择数据库,就会抛出No database selected的错误。

创建数据表的语法:

create table <表名>
(
    字段1, 数据类型 [列级别约束条件] [默认值],
    字段2, 数据类型 [列级别约束条件] [默认值],
    ...
    [表级别约束条件]
)

比如,创建一个员工表:

create table tb_emp1
(
    id  INT(11) primary key,
    name    VARCHAR(25),
    deptId  INT(11),
    salary  FLOAT
);

语句执行后,便创建了一个名称为tb_emp1的数据表,使用SHOW TABLES;语句查看数据表是否创建成功。

mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| tb_emp1           |
+-------------------+
1 row in set (0.00 sec)

使用主键约束

主键,又称主码,是表中一列或多列的组合。主键约束(PrimaryKey Constraint)要求主键列的数据唯一,并且不允许为空。

主键分为两种:

  1. 单字段主键

主键由一个字段组成,SQL语句格式分为以下两种情况:

  • 在定义列的同时指定主键:
字段名 数据类型 PRIMARY KEY [默认值]

比如,这样:

create table tb_emp2
(
    id  INT(11) primary key,
    name    VARCHAR(25),
    deptId  INT(11),
    salary  FLOAT
);
  • 在定义完所有列之后指定主键
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]

比如,这样:

create table tb_emp3
(
    id  INT(11),
    name    VARCHAR(25),
    deptId  INT(11),
    salary  FLOAT,
    primary key(id)
);
  1. 多字段联合主键

主键由多个字段联合组成。

PRIMARY KEY [字段1, 字段2, ... , 字段n]

定义数据表tb_emp4,假设表中间没有主键id,为了唯一确定一个员工,可以把name、deptld联合起来作为主键,SQL语句如下:

create table tb_emp4
(
    name    VARCHAR(25),
    deptId  INT(11),
    salary  FLOAT,
    primary key(name, deptId)
);

使用外键约束

外键用来在两个表的数据之间建立连接,可以是一列或者多列。一个表可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。

外键:首先它是表中的一个字段,虽然不一定是本表的主键,但是要对应另外一个表的主键。外键的主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行。外键的作用是保持数据的一致性、完整性。

主表(父表):相关字段中主键所在的表是主表。

从表(子表):相关字段中外键所在的表是从表。

创建外键的语法:

[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [, 字段名2, ...]
REFERENCES <主表名> 主键列 [, 主键列2, ...]

“外键名”为定义的外键约束的名称,一个表中不能有相同名称的外键;“字段名”表示子表需要添加外键约束的字段列;“主表名”即被子表外键所依赖的表的名称;“主键列”表示主表中定义的主键列,或者列组合。

定义数据表tb_emp5,并在tb_emp5表上创建外键约束。创建一个部门表tb_dept1。

create table tb_dept1
(
    id  INT(11) primary key,
    name  VARCHAR(22) NOT NULL,
    location VARCHAR(50)
);

定义数据表tb_emp5,让它的键deptId作为外键关联到tb_dept1的主键id,SQL语句为:

create table tb_emp5
(
    id      INT(11) PRIMARY KEY,
    name    VARCHAR(25),
    deptId  INT(11),
    salary  FLOAT,
    constraint fk_emp_dept1 foreign key(deptId) references tb_dept1(id)
);

使用非空约束

非空约束(Not Null Constraint)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。

非空约束的语法规则:

字段名 数据类型 not null

定义数据表tb_emp6,指定员工的名称不为空。

create table tb_emp6
(
    id      INT(11) PRIMARY KEY,
    name    VARCHAR(25) NOT NULL,
    deptId  INT(11),
    salary  FLOAT
);

使用唯一约束

唯一性约束(Unique Constraint)要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。唯一性约束的语法规则如下:

  1. 定义完列之后直接指定唯一约束:
字段名 数据类型 UNIQUE

比如,定义一个部门表tb_dept2,指定部门的名称唯一。

CREATE TABLE tb_dept2
(
    id  INT(11) PRIMARY KEY,
    name VARCHAR(22) UNIQUE,
    location VARCHAR(50)
);
  1. 定义完所有列之后指定唯一约束:
[CONSTRAINT <约束名>] UNIQUE(<字段名>)

比如,定义一个部门表tb_dept2,指定部门的名称唯一。

CREATE TABLE tb_dept2
(
    id  INT(11) PRIMARY KEY,
    name VARCHAR(22),
    location VARCHAR(50),
    CONSTRAINT STH UNIQUE(name)
);

UNIQUE和PRIMARY KEY的区别:一个表中可以有多个字段声明为UNIQUE,但只能有一个PRIMARY KEY声明;声明为PRIMAY KEY的列不允许有空值,但是声明为UNIQUE的字段允许空值(NULL)的存在。

使用默认约束

默认约束(Default Constraint)指定某列的默认值。如男性同学较多,性别就可以默认为‘男’。如果插入一条新的记录时没有为这个字段赋值,那么系统会自动为这个字段赋值为‘男’。

字段名 数据类型 DEFAULT 默认值

比如,定义员工表tb_emp7,指定部门编号默认为1111。

CREATE TABLE tb_emp7
(
    id INT(11) PRIMARY KEY,
    name VARCHAR(25) NOT NULL,
    deptId INT(11) DEFAULT 1111,
    salary FLOAT
);

设置表的属性只自动增加

在数据库应用中,经常希望在每次插入新记录时,系统自动生成字段的主键值。可以通过为表主键添加AUTO_INCREMENT关键字来实现。默认的,在MySQL中AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1。一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。AUTO_INCREMENT约束的字段可以是任何整数类型(TINYINT、SMALLIN、INT、BIGINT等)。

字段名 数据类型 AUTO_INCREMENT

比如,定义员工表tb_emp8,指定员工编号默自动递增。

CREATE TABLE tb_emp8
(
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(25) NOT NULL,
    deptId INT(11),
    salary FLOAT
);

在插入记录的时候,默认的自增字段id的值从1开始,每次添加一条新记录,该值自动加1。

mysql> INSERT INTO tb_emp8(name, salary) VALUES ('lucy',10000),('holy',10000);

mysql> select * from tb_emp8;
+----+------+--------+--------+
| id | name | deptId | salary |
+----+------+--------+--------+
|  1 | lucy |   NULL |  10000 |
|  2 | holy |   NULL |  10000 |
+----+------+--------+--------+
2 rows in set (0.00 sec)

查看数据表结构

使用SQL语句创建好数据表之后,可以查看表结构的定义,以确认表的定义是否正确。

查看表基本结构语句DESCRIBE

DESCRIBE/DESC语句可以查看表的字段信息,其中包括字段名、字段数据类型、是否为主键、是否有默认值等。

DESCRIBE 表名;

或者简写为:

DESC 表名;

查看表详细结构语句SHOW CREATE TABLE

SHOW CREATE TABLE语句可以用来显示创建表时的CREATE TABLE语句,语法格式如下:

SHOW CREATE TABLE <表名\G>;

使用SHOW CREATE TABLE语句,不仅可以查看表创建时候的详细语句,还可以查看存储引擎和字符编码。

加上参数\G之后,可使显示结果更加直观,易于查看。

修改数据表

修改表指的是修改数据库中已经存在的数据表的结构。MySQL使用ALTER TABLE语句修改表。

修改表名

ALTER TABLE <旧表名> RENAME [TO] <新表名>;

其中,TO为可选参数,使用与否均不影响结果。

比如:

mysql> alter table tb_dept1 rename tb_deptment3;
Query OK, 0 rows affected (0.03 sec)

修改字段的数据类型

修改字段的数据类型,就是把字段的数据类型转换成另一种数据类型。

ALTER TABLE <表名> MODIFY <字段名> <数据类型>

“表名”指要修改数据类型的字段所在表的名称,“字段名”指需要修改的字段,“数据类型”指修改后字段的新数据类型。

比如,将数据表tb_dept1中name字段的数据类型由VARCHAR(22)修改成VARCHAR(30)。

mysql> desc tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   | PRI | NULL    |       |
| name     | varchar(22) | NO   |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> alter table tb_dept1 modify name varchar(30);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   | PRI | NULL    |       |
| name     | varchar(30) | YES  |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

修改字段名

ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;

“旧字段名”指修改前的字段名;“新字段名”指修改后的字段名;“新数据类型”指修改后的数据类型,如果不需要修改字段的数据类型,将新数据类型设置成与原来一样即可,但数据类型不能为空。

比如,将数据表tb_dept1中的location字段名称改为loc,数据类型保持不变,SQL语句如下:

mysql> alter table tb_dept1 change location loc varchar(50);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc tb_dept1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
| loc   | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

添加字段

随着业务需求的变化,可能需要在已经存在的表中添加新的字段。一个完整字段包括字段名、数据类型、完整性约束。添加字段的语法格式如下:

ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] [FIRST | AFTER 已存在的字段名];

新字段名为需要添加的字段的名称;“FIRST”为可选参数,其作用是将新添加的字段设置为表的第一个字段;“AFTER”为可选参数,其作用是将新添加的字段添加到指定的“已存在字段名”的后面。

“FIRST”或“AFTER已存在字段名”用于指定新增字段在表中的位置,如果SQL语句中没有这两个参数,则默认将新添加的字段设置为数据表的最后列。

  1. 添加无完整性约束条件的字段

在数据表tb_dept1中添加一个没有完整性约束的INT类型的字段managerld(部门经理号):

mysql> alter table tb_dept1 add managerId int(10);
Query OK, 0 rows affected, 1 warning (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 1

mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int         | NO   | PRI | NULL    |       |
| name      | varchar(30) | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int         | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
  1. 添加有完整性约束条件的字段

在数据表tb_dept1中添加一个不能为空的VARCHAR(12)类型的字段column1,SQL语句如下:

mysql> alter table tb_dept1 add column1 varchar(12) not null;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int         | NO   | PRI | NULL    |       |
| name      | varchar(30) | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int         | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
  1. 在表的第一列添加一个字段

在数据表tb_dept1中添加一个INT(11)类型的字段column2,SQL语句如下:

mysql> alter table tb_dept1 add column2 int(11) first;
Query OK, 0 rows affected, 1 warning (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 1

mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2   | int         | YES  |     | NULL    |       |
| id        | int         | NO   | PRI | NULL    |       |
| name      | varchar(30) | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int         | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
  1. 在表的指定列之后添加一个字段

在数据表tb_dept1中name列后添加一个INT(11)类型的字段column3,SQL语句如下:

mysql> alter table tb_dept1 add column3 int(11) after name;
Query OK, 0 rows affected, 1 warning (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 1

mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2   | int         | YES  |     | NULL    |       |
| id        | int         | NO   | PRI | NULL    |       |
| name      | varchar(30) | YES  |     | NULL    |       |
| column3   | int         | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int         | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

删除字段

删除字段是将数据表中的某个字段从表中移除,语法格式如下

ALTER TABLE <表名> DROP <字段名>;

比如,删除数据表tb_dept1表中的column2字段。

mysql> alter table tb_dept1 drop column2;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int         | NO   | PRI | NULL    |       |
| name      | varchar(30) | YES  |     | NULL    |       |
| column3   | int         | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int         | YES  |     | NULL    |       |
| column1   | varchar(12) | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.01 sec)

修改字段的排列位置

可以通过ALTERTABLE来改变表中字段的相对位置。语法格式如下:

ALTER TABLE <表名> MODIFY <字段1> 数据类型 FIRST|AFTER <字段2>;
  1. 修改字段为表的第一个字段

将数据表tb_deptl中的column1字段修改为表的第一个字段,SQL语句如下:

mysql> alter table tb_dept1 modify column1 varchar(12) first;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column1   | varchar(12) | YES  |     | NULL    |       |
| id        | int         | NO   | PRI | NULL    |       |
| name      | varchar(30) | YES  |     | NULL    |       |
| column3   | int         | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| managerId | int         | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
  1. 修改字段到表的指定列之后

将数据表tb_dept1中的column1字段插入到loc字段后面,SQL语句如下:

mysql> alter table tb_dept1 modify column1 varchar(12) after loc;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | int         | NO   | PRI | NULL    |       |
| name      | varchar(30) | YES  |     | NULL    |       |
| column3   | int         | YES  |     | NULL    |       |
| loc       | varchar(50) | YES  |     | NULL    |       |
| column1   | varchar(12) | YES  |     | NULL    |       |
| managerId | int         | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

更改表的存储引擎

MySQL中主要的存储引擎有MyISAM、InnoDB、MEMORY(HEAP)、BDB、FEDERATED等。可以使用SHOW ENGINES;语句查看系统支持的存储引擎。

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

更改表的存储引擎的语法格式如下:

ALTER TABLE <表名> ENGINE=<更改后的存储引擎名>;

将数据表tb_dept2的存储引擎修改为MyISAM。在修改存储引擎之前,先使用SHOW CREATE TABLE查看表当前的存储引擎,结果如下:

mysql> show create table tb_dept2 \G
*************************** 1. row ***************************
       Table: tb_dept2
Create Table: CREATE TABLE `tb_dept2` (
  `id` int NOT NULL,
  `name` varchar(22) DEFAULT NULL,
  `location` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

更改存储引擎:

mysql> alter table tb_dept2 engine=myisam;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table tb_dept2 \G
*************************** 1. row ***************************
       Table: tb_dept2
Create Table: CREATE TABLE `tb_dept2` (
  `id` int NOT NULL,
  `name` varchar(22) DEFAULT NULL,
  `location` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

删除表的外键约束

对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系,MySQL中删除外键的语法格式如下:

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>

删除数据表tb_emp9中的外键约束。首先创建表tb_emp9,创建外键deptId关联tb_dept1表的主键id,SQL语句如下:

create table tb_emp9
(
    id  INT(11) PRIMARY KEY,
    name VARCHAR(25),
    deptId INT(11),
    salary FLOAT,
    CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) REFERENCES tb_dept1(id)
);

使用SHOW CREATE TABLE查看表tb_emp9的结构,结果如下:

mysql> show create table tb_emp9 \G
*************************** 1. row ***************************
       Table: tb_emp9
Create Table: CREATE TABLE `tb_emp9` (
  `id` int NOT NULL,
  `name` varchar(25) DEFAULT NULL,
  `deptId` int DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_emp_dept` (`deptId`),
  CONSTRAINT `fk_emp_dept` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

可以看到,已经成功添加了表的外键,下面删除外键约束,SQL语句如下:

alter table tb_emp9 drop foreign key fk_emp_dept;

执行完毕之后,将删除表tb_emp9的外键约束。使用SHOWCREATE TABLE再次查看表tb_emp9结构,结果如下:

mysql> show create table tb_emp9 \G
*************************** 1. row ***************************
       Table: tb_emp9
Create Table: CREATE TABLE `tb_emp9` (
  `id` int NOT NULL,
  `name` varchar(25) DEFAULT NULL,
  `deptId` int DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_emp_dept` (`deptId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.02 sec)

可以看到,tb_emp9中已经不存在FOREIGN KEY,原有的名称为fk_emp_dept的外键约束删除成功。

posted @ 2022-02-02 14:55  Apostle浩  阅读(386)  评论(0编辑  收藏  举报