MySQL学习——对表的操作(创建、删除、修改、添加约束)
本章将介绍MySQL中对表的一系列操作,主要涉及到使用DDL语言对表进行修改。
1、创建表
前一篇文章提到了,我们在创建表之前需要使用 use 数据库名 来指定对哪一个数据库进行操作。之后再使用创建表的语法结构
1 2 3 4 5 | CREATE TABLE 表名 (列名1 列类型, 列名2 列类型, ... ); |
示例:创建一个employees表,并包含雇员id,雇员名字,雇员薪水三个字段。
1 2 3 4 5 6 7 | USE test01; CREATE TABLE employees( employee_id INT , last_name VARCHAR (30), salary float (8,2) ) |
这里注意在SQL脚本的第一句一定要使用USE 数据库名,来指定接下来的操作是对那个数据库进行操作的。
我们可以使用show tables命令看看当前操作的库下有哪些表。
2、删除表
语法结构:
1 | DROP TABLE 表名 |
3、使用DDL语句修改表
3.1、修改表名
1 | ALTER TABLE 旧表名 RENAME 新表名 |
3.2、修改列名
1 | ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 数据类型 |
可以看到我们在修改列名的同时还可以顺便改掉该列的数据类型。
3.3、修改列数据类型
1 | ALTER TABLE 表名 MODIFY 列名 数据类型 |
3.4、添加新列
1 2 3 | ALTER TABLE 表名 ADD COLUMN 新列名 类型, [ ADD COLUMN 新列名2 类型2,...] |
3.5、删除列
1 2 3 | ALTER TABLE 表名 DROP COLUMN 列名 [ DROP COLUMN 列名2,...] |
4、约束
在关系型数据库中常见的有以下五种约束:
- 非空约束(NOT NULL):指定列不能包含空值
- 唯一性约束(UNIQUE):指定列或者列组合的值对于表中的行是唯一的
- 主键约束(PRIMARY KEY):表每一行的唯一表示,同时包含非空约束和唯一性约束
- 外键约束(FOREIGN KEY):在表和引用表的一个列之间建立并且强制建立一个外键关系
- 用户自定义约束(CHECK):指定一个必须为真的条件
其中第六种用户自定义约束在MySQL中是没有的,因此我们下面主要学习前4中约束类型
4.1、创建表时添加约束
我们可以通过以下代码来查看指定表的现有的约束信息:
1 | SHOW KEYS FROM 表名 |
我们通过下面两个例子来展示如何在创建表时增加上面提到的那些约束。
示例一:
创建一个departments表,其中包含有department_id字段,该列为主键(主键约束)且具备自动增长,department_name列不允许重复(唯一性约束),location_id列不允许包含有空值(非空约束)。
1 2 3 4 5 6 | 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关键字,代码如下:
1 2 3 4 | -- 添加自动增长 ALTER TABLE 表名 MODIFY 列名 类型 AUTO_INCREMENT -- 删除自动增长 ALTER TABLE 表名 MODIFY 列名 类型 |
我们可以通过DESC departments查看该表的字段详细信息,如下图:
示例二:
创建employees表,包含employees_id该列为主键且自动增长,last_name列不允许由空值,email列不允许有重复不允许包含空值,dept_id为外键参照departments表的主键。
1 2 3 4 5 6 7 8 | 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) ) |
这里我们使用外键约束的语法是,在定义完所有的列之后,在最后使用:
1 | CONSTRAINT 约束名 FOREIGN KEY (外键约束的列名) REFERENCES 参照表的表名(参照列的列名) |
4.2、添加 / 删除 表的约束
添加/删除语法结构如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | -- 添加主键约束 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 索引名(同外键约束名) |
注意,删除主键的时候要注意先保证该主键列没有自动增长的功能,如果有则要先删除自动增长才能删除主键约束。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在外漂泊的这几年总结和感悟,展望未来
· 博客园 & 1Panel 联合终身会员上线
· 支付宝事故这事儿,凭什么又是程序员背锅?有没有可能是这样的...
· https证书一键自动续期,帮你解放90天限制
· 在 ASP.NET Core WebAPI如何实现版本控制?
2021-09-16 Python读取、修改、保存json文件