什么是约束?
为了确保表中的数据的完整性(准确性、正确性),为表添加一些限制。是数据库中表设计的一个最基本规则。使用约束可以使数据更加准确,从而减少冗余数据(脏数据)。
数据库完整性约束分为以下几个大类:主键约束、唯一约束、非空约束、默认约束、外键约束。
1.主键约束
理论上来说每一个数据表都必须有一个唯一主键作为数据的唯一标识,设置主键的列不允许为空,主键习惯 id 表示,可以在创建数据时直接指定,也可以通过修改表结构直接添加,设置为主键的列在添加数据时不能重复,即唯一性。
添加两条相同主键值的数据会报错
INSERT INTO student(id,name,age,email) VALUES (1,'张安',18,'1443005893@qq.com')
Affected rows: 1
时间: 0.001s
INSERT INTO student(id,name,age,email) VALUES (1,'李四',20,'1443005893@qq.com')
1062 - Duplicate entry '1' for key 'PRIMARY'
时间: 0s
主键一般不是数据表当中的应用列,而是额外增加的列,而是额外增加的列,如果手动维护的话比较麻烦,所以针对主键Mysql 定制了一种自动增长的策略,既不需要手动给值,而是让mysql自己去维护这个主键,方法是每次找到数据表中最大的ID值加1.
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,//设置自动递增
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Compact;
自动递增 AUTO_INCREMENT 的特点
1.只有整形数据列才能设置为自动递增
2.只有主键才能设置为自增列
3.自动增长,新增数据时可以不赋值
4.初始化默认值为1,默认增量为1
5.自增列一旦被使用过就不会出现
2.唯一约束
唯一约束用来保护表中某列数据不允许重复,与主键约束类似,但级别没有主键高。一份表中唯一约束可以创建多个,并且唯一约束的列允许为空。注意varchar长度为255时,无法设置唯一约束。唯一约束一般用于约束手机号、账户、邮箱等信息。
'email'字段插入相同值会报错。
INSERT INTO student(name,email) VALUES ('张安','1443005893@qq.com')
Affected rows: 1
时间: 0.001s
INSERT INTO student(name,email) VALUES ('张安','1443005893@qq.com')
1062 - Duplicate entry '1443005893@qq.com' for key 'email'
时间: 0.004s
3.非空约束
可以通过 not null 设置数据表中某一列是必填字段,既不允许为空。
4.默认约束
可以通过default设置默认值约束,设置了默认约束的列,如果不给值就会使用默认值来填充。
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`age` int(11) DEFAULT 18 ,//设置默认值
`email` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Compact;
5.外键约束
外键约束用来在两个表的数据之间设立关联,MySql数据库是关系型数据库,既表与表之间的存在关系的,而这种关系我们成为外键关系。