一、数据库基本操作

1、创建数据库,并指定字符集为utf8mysql> CREATE DATABASE hellodb CHARACTER SET utf8;2、查询数据库mysql> SHOW DATABASES;   #查看存在的所有数据库(root才能查看所有)mysql> SHOW CREATE DATABASE hellodb \G;    #查看数据库定义信息3、删除数据库mysql> DROP DATABASE hellodb;

二、数据表的基本操作

1、创建数据表

语法格式为:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name                (create_definition,...)                [table_options]                [partition_options]

例子1:

首先选择创建表的数据库,SQL语句如下    mysql> USE hellodb;    创建tb_text1表,SQL语句为:    mysql> CREATE TABLE tb_text1     (id INT(11),name VARCHAR(25),deptld INT(11),salary FLOAT);    Query OK, 0 rows affected (0.10 sec)  #表示创建成功    查看一下创建的表,SQL语句如下:    mysql> SHOW TABLES;    +-------------------+    | Tables_in_hellodb |    +-------------------+    | tb_text1          |    +-------------------+    1 row in set (0.00 sec)

例子2:

 使用主键约束    (1)、单字段主键,可以有两种方法,具体SQL语句如下:    创建数据表tb_text2,其主键为id(直接在列后面定义);    mysql> CREATE TABLE tb_text2 (id INT(11)PRIMARY KEY,name VARCHAR(25),           deptld INT(11),salary FLOAT);    Query OK, 0 rows affected (0.40 sec)    创建数据表tb_text3,其主键为id(定义在所有列之后);    mysql> CREATE TABLE tb_text3 (id INT(11),name VARCHAR(25),deptld INT(11),           salary FLOAT,PRIMARY KEY(id));    Query OK, 0 rows affected (0.40 sec)       (2)、多字段联合主键(name,deptld联合在一起成为联合主键)    mysql> CREATE TABLE tb_text4 (id INT(11),name VARCHAR(25),deptld INT(11),           salary FLOAT,PRIMARY KEY(name,deptld));    Query OK, 0 rows affected (0.03 sec)

例子3:外键约束

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

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

    主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。

    从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。

创建主表tb_dept1,主键为id;mysql> CREATE TABLE tb_dept1 (id INT(11)PRIMARY KEY,name VARCHAR(22) NOT NULL,       location VARCHAR(50));Query OK, 0 rows affected (0.38 sec)创建从表tb_text5,让它的键deptld作为外键关联到主表的id;mysql> CREATE TABLE tb_text5 (id INT(11)PRIMARY KEY,name VARCHAR(25),deptld INT(11),    salary FLOAT,CONSTRAINT fk_emp_deptl FOREIGN KEY(deptld)REFERENCES tb_dept1(id));Query OK, 0 rows affected (0.05 sec)   #在表tb_text5上添加了一个名称为fk_emp_deptl的外键约束,外键名称为deptld,其依赖于表tb_dept1的主键id。

关联指的是在关系型数据库中,相关表之间的联系,它是通过相容或相同的属性或属性组来表示的,子表的外键必须关联主表的主键,且关联字段得数据类型必须匹配,如果类型不一样,则创建子表时,就会出现错误“ERROR 1005(HY000):Cant't create table 'database.tablename'(errno:150)"

例子4:使用非空约束

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

mysql> CREATE TABLE tb_text6 (id INT(11)PR`IMARY KEY,name VARCHAR(25)NOT NULL,deptld        INT(11),salary FLOAT,CONSTRAINT fk_emp_deptl2 FOREIGN KEY (deptld)REFERENCES        tb_dept1(id));Query OK, 0 rows affected (0.42 sec)#在tb_text6中创建的name字段不允许为空

例子5:唯一性约束

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

(1)在定义完列之后直接指定唯一约束  mysql> CREATE TABLE tb_dept2 ( id INT (11)PRIMARY KEY,name VARCHAR(22)UNIQUE,       location VARCHAR(45));  Query OK, 0 rows affected (0.48 sec)(2)定义完所有列之后指定唯一约束  mysql> CREATE TABLE tb_dept3 (id INT(11)PRIMARY KEY,name VARCHAR(22),location          VARCHAR(50),CONSTRAINT STH UNIQUE(name));  Query OK, 0 rows affected (0.05 sec)

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

例子6:默认约束(下面使用mariadb测试)

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

MariaDB [hellodb]> CREATE TABLE tb_text7 (id INT(11)PRIMARY KEY,name VARCHAR(25)                   NOT NULL,deptld INT(11)DEFAULT 1111,salary FLOAT,CONSTRAINT                    fk_emp_dept3 FOREIGN KEY(deptld)REFERENCES tb_dept1(id));Query OK, 0 rows affected (0.06 sec)

以上语句执行成功过后,表tb_text7上的字段deptld拥有了一个默认值1111,新插入的记录如果没有指定部门编号,则默认都为1111。

例子7:设置表属性值自动增加

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

MariaDB [hellodb]> CREATE TABLE tb_text8 (id INT(11)PRIMARY KEY AUTO_INCREMENT,    name VARCHAR(25)NOT NULL,deptld INT(11),salary FLOAT,CONSTRAINT fk_emp_dept5     FOREIGN KEY(deptld)REFERENCES tb_dept1(id));Query OK, 0 rows affected (0.41 sec)

插入数据到表中,查看是否自动添加

MariaDB [hellodb]> INSERT INTO tb_text8(name,salary) VALUES ('Lucy',1000),                   ('Lura',1200),('Kevin',1500);Query OK, 3 rows affected (0.02 sec)Records: 3  Duplicates: 0  Warnings: 0MariaDB [hellodb]> SELECT * FROM tb_text8;+----+-------+--------+--------+| id | name  | deptld | salary |+----+-------+--------+--------+|  1 | Lucy  |   NULL |   1000 ||  2 | Lura  |   NULL |   1200 ||  3 | Kevin |   NULL |   1500 |+----+-------+--------+--------+3 rows in set (0.00 sec)   #可以看到id自动编号,在这里并没有给值到id;

2、查看数据表结构

2.1、查看表的基本结构

语法:DESC 表名;MariaDB [hellodb]> DESC tb_text8;+--------+-------------+------+-----+---------+----------------+| Field  | Type        | Null | Key | Default | Extra          |+--------+-------------+------+-----+---------+----------------+| id     | int(11)     | NO   | PRI | NULL    | auto_increment || name   | varchar(25) | NO   |     | NULL    |                || deptld | int(11)     | YES  | MUL | NULL    |                || salary | float       | YES  |     | NULL    |                |+--------+-------------+------+-----+---------+----------------+4 rows in set (0.01 sec)NULL:表示该列可以存储NULL值。Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部     分;MUL表示在列中某个给定值允许出现多次。Default:表示该列是否有默认值,如果有的话值是多少。Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMNENT等。

2.2、查看表的详细结构

语法:SHOW CREATE TABLE 
<表名\g>
;MariaDB [hellodb]> SHOW CREATE TABLE tb_text8\G;*************************** 1. row ***************************       Table: tb_text8Create Table: CREATE TABLE `tb_text8` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(25) NOT NULL,  `deptld` int(11) DEFAULT NULL,  `salary` float DEFAULT NULL,  PRIMARY KEY (`id`),  KEY `fk_emp_dept5` (`deptld`),  CONSTRAINT `fk_emp_dept5` FOREIGN KEY (`deptld`) REFERENCES `tb_dept1` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf81 row in set (0.00 sec)

使用SHOW CREATE TABLE语句,不仅可以查看表创建时候的详细语句,而且还可以查看存储引擎和字符编码。如果不加'\G'参数,显示的结果可能非常混乱,加上参数'\G'之后,可使显示结果更加直观,易于查看。

2.3、修改数据表

2.3.1、修改表名语法:ALTER TABLE 
<旧表名>
 RENAME [TO] 
<新表名>
;例如:MariaDB [hellodb]> SHOW TABLES;+-------------------+| Tables_in_hellodb |+-------------------+| tb_dept1          || tb_dept2          || tb_dept3          || tb_text1          || tb_text2          || tb_text3          || tb_text4          || tb_text5          || tb_text6          || tb_text7          || tb_text8          |+-------------------+11 rows in set (0.00 sec)MariaDB [hellodb]> ALTER TABLE tb_dept3 RENAME tb_deptment3;Query OK, 0 rows affected (0.02 sec)#修改表tb_dept3的名字为tb_deptment3MariaDB [hellodb]> SHOW TABLES;   #可以看出修改结果+-------------------+| Tables_in_hellodb |+-------------------+| tb_dept1          || tb_dept2          || tb_deptment3      || tb_text1          || tb_text2          || tb_text3          || tb_text4          || tb_text5          || tb_text6          || tb_text7          || tb_text8          |+-------------------+11 rows in set (0.00 sec)2.3.2、修改字段的数据类型语法:ALTER TABLE 
<表名>
 MODIFY 
<字段名>
 
<数据类型>
例如:MariaDB [hellodb]> DESC tb_dept1;+----------+-------------+------+-----+---------+-------+| Field    | Type        | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| id       | int(11)     | NO   | PRI | NULL    |       || name     | varchar(25) | NO   |     | NULL    |       || location | varchar(50) | YES  |     | NULL    |       |+----------+-------------+------+-----+---------+-------+3 rows in set (0.01 sec)MariaDB [hellodb]> ALTER TABLE tb_dept1 MODIFY name VARCHAR(30);Query OK, 0 rows affected (0.52 sec)               Records: 0  Duplicates: 0  Warnings: 0MariaDB [hellodb]> DESC tb_dept1;+----------+-------------+------+-----+---------+-------+| Field    | Type        | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| id       | int(11)     | NO   | PRI | NULL    |       || name     | varchar(30) | YES  |     | NULL    |       || location | varchar(50) | YES  |     | NULL    |       |+----------+-------------+------+-----+---------+-------+3 rows in set (0.01 sec)    #可以看到name字段varchar(30)已经修改成功2.3.3、修改字段名语法:ALTER TABLE 
<表名>
 CHANGE 
<旧字段名>
 
<新字段名>
 
<新数据类型>
;例如:MariaDB [hellodb]> ALTER TABLE tb_dept1 CHANGE location loc VARCHAR(50);MariaDB [hellodb]> DESC tb_dept1;+-------+-------------+------+-----+---------+-------+| Field | Type        | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id    | int(11)     | NO   | PRI | NULL    |       || name  | varchar(30) | YES  |     | NULL    |       || loc   | varchar(50) | YES  |     | NULL    |       |+-------+-------------+------+-----+---------+-------+3 rows in set (0.00 sec)      #可以看到location改成loc;MariaDB [hellodb]> ALTER TABLE tb_dept1 CHANGE loc location VARCHAR(60);MariaDB [hellodb]> DESC tb_dept1;+----------+-------------+------+-----+---------+-------+| Field    | Type        | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| id       | int(11)     | NO   | PRI | NULL    |       || name     | varchar(30) | YES  |     | NULL    |       || location | varchar(60) | YES  |     | NULL    |       |+----------+-------------+------+-----+---------+-------+3 rows in set (0.00 sec)  #字段和数据类型都改了#由于不同类型的数据在机器中存储的方式及长度并不相同,修改数据类型可能会影响到数据表中已 有的数据记录。因此,当数据库表中已经有数据时,不要轻易修改数据类型。 2.3.4、添加字段ALTER TABLE 
<表名>
 ADD 
<新字段名>
 
<数据类型>
 [约束条件][FIRST|AFTER 已存在的字段名];例如1:MariaDB [hellodb]> ALTER TABLE tb_dept1 ADD managerld INT(10);#添加一个没有完整性约束的INT类型的字段managerld;MariaDB [hellodb]> DESC tb_dept1;+-----------+-------------+------+-----+---------+-------+| Field     | Type        | Null | Key | Default | Extra |+-----------+-------------+------+-----+---------+-------+| id        | int(11)     | NO   | PRI | NULL    |       || name      | varchar(30) | YES  |     | NULL    |       || location  | varchar(60) | YES  |     | NULL    |       || managerld | int(10)     | YES  |     | NULL    |       |+-----------+-------------+------+-----+---------+-------+4 rows in set (0.00 sec)例如2:#添加一个不能为空的VARCHAR类型的字段cohumml;MariaDB [hellodb]> ALTER TABLE tb_dept1 ADD cohumnl VARCHAR(12)NOT NULL;MariaDB [hellodb]> DESC tb_dept1;+-----------+-------------+------+-----+---------+-------+| Field     | Type        | Null | Key | Default | Extra |+-----------+-------------+------+-----+---------+-------+| id        | int(11)     | NO   | PRI | NULL    |       || name      | varchar(30) | YES  |     | NULL    |       || location  | varchar(60) | YES  |     | NULL    |       || managerld | int(10)     | YES  |     | NULL    |       || cohumnl   | varchar(12) | NO   |     | NULL    |       |+-----------+-------------+------+-----+---------+-------+5 rows in set (0.00 sec)#在表的第一列添加一个类型为INT的cohumn2的字段;MariaDB [hellodb]> ALTER TABLE tb_dept1 ADD cohumn2 INT(11)FIRST;Query OK, 0 rows affected (0.40 sec)Records: 0  Duplicates: 0  Warnings: 0MariaDB [hellodb]> DESC tb_dept1;+-----------+-------------+------+-----+---------+-------+| Field     | Type        | Null | Key | Default | Extra |+-----------+-------------+------+-----+---------+-------+| cohumn2   | int(11)     | YES  |     | NULL    |       || id        | int(11)     | NO   | PRI | NULL    |       || name      | varchar(30) | YES  |     | NULL    |       || location  | varchar(60) | YES  |     | NULL    |       || managerld | int(10)     | YES  |     | NULL    |       || cohumnl   | varchar(12) | NO   |     | NULL    |       |+-----------+-------------+------+-----+---------+-------+6 rows in set (0.00 sec)#在指定列之后添加字段MariaDB [hellodb]> ALTER TABLE tb_dept1 ADD cohumn3 INT(11)AFTER name;MariaDB [hellodb]> DESC tb_dept1;+-----------+-------------+------+-----+---------+-------+| Field     | Type        | Null | Key | Default | Extra |+-----------+-------------+------+-----+---------+-------+| cohumn2   | int(11)     | YES  |     | NULL    |       || id        | int(11)     | NO   | PRI | NULL    |       || name      | varchar(30) | YES  |     | NULL    |       || cohumn3   | int(11)     | YES  |     | NULL    |       || location  | varchar(60) | YES  |     | NULL    |       || managerld | int(10)     | YES  |     | NULL    |       || cohumnl   | varchar(12) | NO   |     | NULL    |       |+-----------+-------------+------+-----+---------+-------+7 rows in set (0.01 sec)2.3.5、删除字段语法:ALTER TABLE 
<表名>
 DROP 
<字段名>
;#删除tb_dept1表的cohumn3字段MariaDB [hellodb]> ALTER TABLE tb_dept1 DROP cohumn3;MariaDB [hellodb]> DESC tb_dept1;+-----------+-------------+------+-----+---------+-------+| Field     | Type        | Null | Key | Default | Extra |+-----------+-------------+------+-----+---------+-------+| cohumn2   | int(11)     | YES  |     | NULL    |       || id        | int(11)     | NO   | PRI | NULL    |       || name      | varchar(30) | YES  |     | NULL    |       || location  | varchar(60) | YES  |     | NULL    |       || managerld | int(10)     | YES  |     | NULL    |       || cohumnl   | varchar(12) | NO   |     | NULL    |       |+-----------+-------------+------+-----+---------+-------+6 rows in set (0.00 sec)2.3.6、修改字段排列位置ALTER TABLE 
<表名>
 MODIFY 
<字段1>
 
<数据类型>
 FIRST|AFTER 
<字段2>
;  “字段1”指要修改位置的字段,“数据类型“指”字段1“的数据类型,”FIRST“为可选参数,指将“字段1”修改为表的第一个字段,“AFTER 字段2”指将”字段1“插入到”字段2“后面。例如:#将表tb_dept1的cohumn1字段修改为表的第一个字段MariaDB [hellodb]> ALTER TABLE tb_dept1 MODIFY cohumn1 VARCHAR(12)FIRST;MariaDB [hellodb]> DESC tb_dept1;+-----------+-------------+------+-----+---------+-------+| Field     | Type        | Null | Key | Default | Extra |+-----------+-------------+------+-----+---------+-------+| cohumn1   | varchar(12) | YES  |     | NULL    |       || cohumn2   | int(11)     | YES  |     | NULL    |       || id        | int(11)     | NO   | PRI | NULL    |       || name      | varchar(30) | YES  |     | NULL    |       || location  | varchar(60) | YES  |     | NULL    |       || managerld | int(10)     | YES  |     | NULL    |       |+-----------+-------------+------+-----+---------+-------+6 rows in set (0.00 sec)#修改字段到表的指定列之后MariaDB [hellodb]> ALTER TABLE tb_dept1 MODIFY cohumn2 VARCHAR(12)AFTER location;MariaDB [hellodb]> DESC tb_dept1;+-----------+-------------+------+-----+---------+-------+| Field     | Type        | Null | Key | Default | Extra |+-----------+-------------+------+-----+---------+-------+| cohumn1   | varchar(12) | YES  |     | NULL    |       || id        | int(11)     | NO   | PRI | NULL    |       || name      | varchar(30) | YES  |     | NULL    |       || location  | varchar(60) | YES  |     | NULL    |       || cohumn2   | varchar(12) | YES  |     | NULL    |       || managerld | int(10)     | YES  |     | NULL    |       |+-----------+-------------+------+-----+---------+-------+6 rows in set (0.01 sec)

2.4、修改表的存储引擎

语法:ALTER TABLE 
<表名>
 ENTINE=
<更改后的存储引擎名>
;例如:#修改表tb_deptment3的存储引擎为MyISAM;MariaDB [hellodb]> SHOW CREATE TABLE tb_deptment3\G;*************************** 1. row ***************************       Table: tb_deptment3Create Table: CREATE TABLE `tb_deptment3` (  `id` int(11) NOT NULL,  `name` varchar(22) DEFAULT NULL,  `location` varchar(50) DEFAULT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `STH` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)MariaDB [hellodb]> ALTER TABLE tb_deptment3 ENGINE=MyISAM;MariaDB [hellodb]> SHOW CREATE TABLE tb_deptment3\G;*************************** 1. row ***************************       Table: tb_deptment3Create Table: CREATE TABLE `tb_deptment3` (  `id` int(11) NOT NULL,  `name` varchar(22) DEFAULT NULL,  `location` varchar(50) DEFAULT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `STH` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf81 row in set (0.00 sec)

2.5、删除表的外键约束

语法:ALTER TABLE 
<表名>
 DROP FOREIGN KEY 
<外键约束名>
;例子:#先创建一个名为tb_text9的表;MariaDB [hellodb]> CREATE TABLE tb_text9 (id INT(11)PRIMARY KEY,name VARCHAR(25),                   deptld INT(11),salary FLOAT,CONSTRAINT fk_emp_dept FOREIGN                    KEY(deptld)REFERENCES tb_dept1(id));Query OK, 0 rows affected (0.43 sec)MariaDB [hellodb]> SHOW CREATE TABLE tb_text9\G;*************************** 1. row ***************************       Table: tb_text9Create Table: CREATE TABLE `tb_text9` (  `id` int(11) NOT NULL,  `name` varchar(25) DEFAULT NULL,  `deptld` int(11) DEFAULT NULL,  `salary` float DEFAULT NULL,  PRIMARY KEY (`id`),  KEY `fk_emp_dept` (`deptld`),  CONSTRAINT `fk_emp_dept` FOREIGN KEY (`deptld`) REFERENCES `tb_dept1` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec) #可以看到成功添加了外键MariaDB [hellodb]> ALTER TABLE tb_text9 DROP FOREIGN KEY fk_emp_dept; #删除名称为fk_emp_dept的外键约束MariaDB [hellodb]> SHOW CREATE TABLE tb_text9\G;*************************** 1. row ***************************       Table: tb_text9Create Table: CREATE TABLE `tb_text9` (  `id` int(11) NOT NULL,  `name` varchar(25) DEFAULT NULL,  `deptld` int(11) DEFAULT NULL,  `salary` float DEFAULT NULL,  PRIMARY KEY (`id`),  KEY `fk_emp_dept` (`deptld`)) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)   #表中不存在POREIGN KEY,fk_emp_dept外键约束删除成功

2.6、删除数据表

2.6.1、删除没有被关联的表语法:DROP TABLE [IF EXISTS]表1,表2,...表n;MariaDB [hellodb]> SHOW TABLES;+-------------------+| Tables_in_hellodb |+-------------------+| tb_dept1          || tb_dept2          || tb_deptment3      || tb_text1          || tb_text2          || tb_text3          || tb_text4          || tb_text5          || tb_text6          || tb_text7          || tb_text8          || tb_text9          |+-------------------+12 rows in set (0.00 sec)MariaDB [hellodb]> DROP TABLE tb_dept2;MariaDB [hellodb]> SHOW TABLES;+-------------------+| Tables_in_hellodb |+-------------------+| tb_dept1          || tb_deptment3      || tb_text1          || tb_text2          || tb_text3          || tb_text4          || tb_text5          || tb_text6          || tb_text7          || tb_text8          || tb_text9          |+-------------------+11 rows in set (0.00 sec)2.6.2、删除被其他表关联的主表MariaDB [hellodb]> CREATE TABLE tb_dept2 (id INT(11)PRIMARY KEY,name VARCHAR(22),                    location VARCHAR(50));Query OK, 0 rows affected (0.42 sec)MariaDB [hellodb]> CREATE TABLE tb_emp (id INT(11)PRIMARY KEY,name VARCHAR(25),                   deptld INT(11),salary FLOAT,CONSTRAINT fk_emp_dept FOREIGN                    KEY(deptld)REFERENCES tb_dept2(id));Query OK, 0 rows affected (0.06 sec)MariaDB [hellodb]> SHOW CREATE TABLE tb_emp\G;*************************** 1. row ***************************       Table: tb_empCreate Table: CREATE TABLE `tb_emp` (  `id` int(11) NOT NULL,  `name` varchar(25) DEFAULT NULL,  `deptld` int(11) DEFAULT NULL,  `salary` float DEFAULT NULL,  PRIMARY KEY (`id`),  KEY `fk_emp_dept` (`deptld`),  CONSTRAINT `fk_emp_dept` FOREIGN KEY (`deptld`) REFERENCES `tb_dept2` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)MariaDB [hellodb]> DROP TABLE tb_dept2;ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails   #可以看到,有外键约束时,不能删除主表;MariaDB [hellodb]> ALTER TABLE tb_emp DROP FOREIGN KEY fk_emp_dept;#取消约束MariaDB [hellodb]> DROP TABLE tb_dept2;  #删除成功;Query OK, 0 rows affected (0.01 sec)