本章将介绍MySQL中对表的一系列操作,主要涉及到使用DDL语言对表进行修改。
前一篇文章提到了,我们在创建表之前需要使用 use 数据库名 来指定对哪一个数据库进行操作。之后再使用创建表的语法结构
CREATE TABLE 表名 (列名1 列类型, 列名2 列类型, ... );
示例:创建一个employees表,并包含雇员id,雇员名字,雇员薪水三个字段。
USE test01; CREATE TABLE employees( employee_id INT, last_name VARCHAR(30), salary float(8,2) )
这里注意在SQL脚本的第一句一定要使用USE 数据库名,来指定接下来的操作是对那个数据库进行操作的。
我们可以使用show tables命令看看当前操作的库下有哪些表。
语法结构:
DROP TABLE 表名
ALTER TABLE 旧表名 RENAME 新表名
ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 数据类型
可以看到我们在修改列名的同时还可以顺便改掉该列的数据类型。
ALTER TABLE 表名 MODIFY 列名 数据类型
ALTER TABLE 表名 ADD COLUMN 新列名 类型, [ADD COLUMN 新列名2 类型2,...]
ALTER TABLE 表名 DROP COLUMN 列名 [DROP COLUMN 列名2,...]
在关系型数据库中常见的有以下五种约束:
其中第六种用户自定义约束在MySQL中是没有的,因此我们下面主要学习前4中约束类型
我们可以通过以下代码来查看指定表的现有的约束信息:
SHOW KEYS FROM 表名
我们通过下面两个例子来展示如何在创建表时增加上面提到的那些约束。
示例一:
创建一个departments表,其中包含有department_id字段,该列为主键(主键约束)且具备自动增长,department_name列不允许重复(唯一性约束),location_id列不允许包含有空值(非空约束)。
USE test01; CREATE TABLE departments( department_id INT PRIMARY KEY AUTO_INCREMENT, department_name VARCHAR(30) UNIQUE, location_id INT NOT NULL )
其中PRIMARY KEY表示该列是主键约束,AUTO_INCREMENT表示该列自动增长,UNIQUE表示唯一性约束,NOT NULL表示非空约束。要注意到采用这种方式(直接在字段类型后增加关键字的方式指定约束,这样的约束名是由MySQL自动设定的)。
注意:自动增长必须是整数类型,一个表中只允许一个列自动增长,只有具备主键约束或唯一性约束的列才能设定自动增长。自动增长不属于约束,因此添加或者删除自动增长需要使用MODIFY关键字,代码如下:
-- 添加自动增长 ALTER TABLE 表名 MODIFY 列名 类型 AUTO_INCREMENT -- 删除自动增长 ALTER TABLE 表名 MODIFY 列名 类型
我们可以通过DESC departments查看该表的字段详细信息,如下图:
示例二:
创建employees表,包含employees_id该列为主键且自动增长,last_name列不允许由空值,email列不允许有重复不允许包含空值,dept_id为外键参照departments表的主键。
USE test01; CREATE TABLE employees( employees_id INT PRIMARY KEY AUTO_INCREMENT, last_name VARCHAR(30) NOT NULL, email VARCHAR(40) UNIQUE NOT NULL, dept_id INT, CONSTRAINT emp_fk FOREIGN KEY(dept_id) REFERENCES departments(department_id) )
这里我们使用外键约束的语法是,在定义完所有的列之后,在最后使用:
CONSTRAINT 约束名 FOREIGN KEY(外键约束的列名) REFERENCES 参照表的表名(参照列的列名)
添加/删除语法结构如下:
-- 添加主键约束 ALTER TABLE 表名 ADD PRIMARY KEY(列名) -- 添加非空约束 ALTER TABLE 表名 MODIFY 列名 类型 NOT NULL -- 添加唯一性约束 ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列名) -- 添加外键约束 ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY(列名) REFERENCES 参照表表名(参照列列名) -- 删除主键约束 ALTER TABLE 表名 DROP PRIMARY KEY -- 删除非空约束 ALTER TABLE 表名 MODIFY 列名 类型 NULL -- 删除唯一性约束 ALTER TABLE 表名 DROP KEY 约束名 -- 删除外键第一步 ALTER TABLE 表名 DROP FOREIGN KEY 约束名 -- 删除外键第二步 ALTER TABLE 表名 DROP INDEX 索引名(同外键约束名)
注意,删除主键的时候要注意先保证该主键列没有自动增长的功能,如果有则要先删除自动增长才能删除主键约束。