目录
数据库约束
以下为本篇文章会介绍的约束
(1)NOT NULL - 指示某列不能存储 NULL 值。
(2)UNIQUE - 保证某列的每行必须有唯一的值。
(3)DEFAULT - 规定没有给列赋值时的默认值。(4)PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。(5)FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
1.NULL约束
创建表时,可以指定某列不为空:
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT,
name VARCHAR(20),
qq_mail VARCHAR(20)
);
![](https://i-blog.csdnimg.cn/blog_migrate/d0a2c2f5146127320e65059d3f32ab01.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4d9f1a7fdf5ea6ccac03e5da563999b0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/151d7cf3e08e3d035bbdca58ef2279a8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/45ba4456275bf976199b5d563041a44f.png)
2.UNIQUE:唯一约束
设置学生表结构2-1
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT UNIQUE,
name VARCHAR(20),
qq_mail VARCHAR(20)
);
这里我们重新设置一下表结构,对sn进行约束为唯一约束
演示效果:
补充:
加上unique约束之后,当后续进行插入或修改操作时,系统都会进行查询,看看操作值是否存在。
3.DEFAULT:默认值约束
指定插入数据时,若列为空,则为默认值
设置学生表结构3-1
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);
![](https://i-blog.csdnimg.cn/blog_migrate/9a5b28ef2f1eb412ad77ce4c53a11e59.png)
4.PRIMARY KEY:主键约束
可以理解为:主键是 NOT NULL 和 UNIQUE 的结合
非空&唯一
-
每个表只能定义一个主键。
-
主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL PRIMARY KEY,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);
![](https://i-blog.csdnimg.cn/blog_migrate/13a08687336c38d9df849743164bd3ba.png)
-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment
(1)一般演示:
![](https://i-blog.csdnimg.cn/blog_migrate/5b075d657664a8b4ee128ef6f660f5d7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/252285168ae66bfe8690ca878ca29273.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ab9479b3fbfafbaf32455f7a7df95634.png)
![](https://i-blog.csdnimg.cn/blog_migrate/075367d976d80a7b2d46c0d09f4d2c80.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9a039499e1c7be3e9e333d214917cef2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5a27b6a0fb928d6a3139b88074da3aee.png)
注意:
(1)自增的数据必须是整形。
(2)上述自增,只能在单个数据库中生效。如果数据库是由多个mysql服务器构成的集群,自增主键就会失效。
5.FOREIGN KEY:外键约束
外键用于关联其他表的主键或唯一键
语法如下:
foreign key (字段名) references 主表(列)
本表的某列引用另一个表的对应列,此时就要求,本表中个这个列的数据与另一个表的类型对应。
接下来我们设计一个案例如下:
- 创建班级表classes,id为主键
DROP TABLE IF EXISTS classes; CREATE TABLE classes ( id INT PRIMARY KEY auto_increment, name VARCHAR(20), desc1 VARCHAR(100) );
- 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id。
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20),
classes_id int,
FOREIGN KEY (classes_id) REFERENCES classes(id)
);
-
必须为主表定义主键。
MySQL 外键约束(FOREIGN KEY是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
简单理解:
班级表约束了学生表。我们把班级表这种约束别人的表称为父表,把学生表这种被约束的表称为子表。
演示:
(1)父表对字表的约束。外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。
如果输入不存在的classes_id.
(2)外键为空值:
补充:字表对父表也有约束
如果尝试修改或删除父表的记录,也会先查看一下子表,看看这个结果是否在子表中被引用,如果被引用则无法删改。
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞