什么是约束?
为了确保表中的数据的完整性(准确性、正确性),为表添加一些限制。是数据库中表设计的一个最基本规则。使用约束可以使数据更加准确,从而减少冗余数据(脏数据)。
数据库完整性约束分为以下几个大类:
理论上来说每一个数据表都必须有一个唯一主键作为数据的唯一标识,设置主键的列不允许为空,主键习惯 id 表示,可以在创建数据时直接指定,也可以通过修改表结构直接添加,设置为主键的列在添加数据时不能重复,既唯一性。
CREATE TABLE `student` (
`id` int(11) NOT NULL ,
`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 = InnoD AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Compact;
添加两条主键id的数值
INSERT INTO student(id,name,age,email) VALUES (1,'张安',18,'[email protected]')
INSERT INTO student(id,name,age,email) VALUES (1,'李四',20,'[email protected]')
我们会发现有错误
主键一般不是数据表当中的应用列,而是额外增加的列,而是额外增加的列,如果手动维护的话比较麻烦,所以针对主键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;
INSERT INTO student(name,age,email) VALUES ('张安',18,'[email protected]')
INSERT INTO student(name,age,email) VALUES ('李四',20,'[email protected]')
自动递增 AUTO_INCREMENT 的特点
1.只有整形数据列才能设置为自动递增
2.只有主键才能设置为自增列
3.自动增长,新增数据时可以不赋值
4.初始化默认值为1,增量为1
5.自增列一旦被使用过就不会出现
唯一约束用来保护表中某列数据不允许重复,与主键约束类似,但级别没有主键高。一份表中唯一约束可以创建多个,并且唯一约束的列允许为空。
唯一约束一般用于约束手机号、账户、邮箱等信息。
INSERT INTO student(name,age,email) VALUES ('张安',18,'[email protected]')
INSERT INTO student(name,age,email) VALUES ('lisi',20,'[email protected]')
可以通过 not null 设置数据表中某一列是必填字段,既不允许为空。
可以通过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;
INSERT INTO student(name,email) VALUES ('张安','[email protected]')
INSERT INTO student(name,email) VALUES ('张安','[email protected]')
外键约束用来在两个表的数据之间设立关联,MySql数据库是关系型数据库,既表与表之间的存在关系的,而这种关系我们成为外键关系。
创加一个丈夫表 和一个妻子表,妻子表当中设置外键关联丈夫表
CREATE TABLE `husband` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` 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;
-- ----------------------------
-- Table structure for wife
-- ----------------------------
DROP TABLE IF EXISTS `wife`;
CREATE TABLE `wife` (
`id` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
CONSTRAINT `id` FOREIGN KEY (`id`) REFERENCES `husband` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Compact;