失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 六 约束(主键约束 唯一约束 非空约束 检查约束 外键约束)

六 约束(主键约束 唯一约束 非空约束 检查约束 外键约束)

时间:2024-04-08 16:37:41

相关推荐

六 约束(主键约束 唯一约束 非空约束 检查约束 外键约束)

## 约束,数据类型,触发器## 保证数据的正确性,完整性,有效性/*主键约束唯一约束非空约束检查约束 (mysql8才有)外键约束默认值约束*/

1.主键约束

## 主键约束: 唯一非空## 注意: 一张表只能有一个主键约束## 主键: 单列主键, 组合主键(多列组合形成一个主键)## 关键字: PRIMARY KEY

## 第一种: 创建表的时候, 列声明后面DROP TABLE tb_user;CREATE TABLE tb_user(id INT PRIMARY KEY,username VARCHAR(30),`password` VARCHAR(30),age INT)INSERT INTO tb_user (id,username, `password`, age) VALUE (1,'zhangsan', '123', 21) ;INSERT INTO tb_user (id,username, `password`, age) VALUE (1,'李四', '345', 21) ;## 第一种: 创建表的时候,所有列声明之后,另起一行设置主键约束CREATE TABLE tb_user(id INT,username VARCHAR(30),`password` VARCHAR(30),age INT,PRIMARY KEY(id))## 表主键有id,与username共同组合成一个主键CREATE TABLE tb_user(id INT,username VARCHAR(30),`password` VARCHAR(30),age INT,PRIMARY KEY(id,username))INSERT INTO tb_user (id,username, `password`, age) VALUE (1,'zhangsan', '123', 21) ;INSERT INTO tb_user (id,username, `password`, age) VALUE (1,'李四', '345', 21) ;INSERT INTO tb_user (id,username, `password`, age) VALUE (1,'zhangsan', '44545', 22) ;##组合主键: PRIMARY KEY(id,username)## id,与username都一样,才是重复值CREATE TABLE tb_user(id INT,username VARCHAR(30),`password` VARCHAR(30),age INT)##第三种写法: 对存在的表,添加主键## ALTER TABLE 表名 ADD PRIMARY KEY(列名);ALTER TABLE tb_user ADD PRIMARY KEY(id);## 主键约束,唯一约束, 把这个约束作为一个索引(提高查询效率)

/*主键设置经验:1. 主键一般不要设置在有意义的列, 一般都表设置一个id, 作为主键2. 修改数据,不会修改主键*/## id 一般是数字## 唯一: mysql提供: 自增列## 设置自增列 AUTO_INCREMENT## 创建表的时候, 设置自增列CREATE TABLE tb_user(id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(30),`password` VARCHAR(30),age INT)#使用: 每次执行insert的时候, 在上一次值加1作为insert插入值#从1开始#写insert语句的时候, 自增列不需要手动赋值INSERT INTO tb_user (username, `password`, age) VALUE ('zhangsan', '123', 21) ;INSERT INTO tb_user (username, `password`, age) VALUE ('lisi', '123', 21) ;#如果给自增列手动赋值 id:100INSERT INTO tb_user (id,username, `password`, age) VALUE (100,'wangwu', '123', 21) ;## 下一次执行insert, 自增列从 101INSERT INTO tb_user (username, `password`, age) VALUE ('zhaoliu', '123', 21) ;## 执行删除操作, DELETE FROM tb_user WHERE id = 2;INSERT INTO tb_user (username, `password`, age) VALUE ('lisisi', '123', 21) ;DROP TABLE tb_user;#第二种创建: 对已存在的表添加自增列CREATE TABLE tb_user(id INT PRIMARY KEY ,username VARCHAR(30),`password` VARCHAR(30),age INT)ALTER TABLE tb_user CHANGE id id INT AUTO_INCREMENT;##删除自增ALTER TABLE tb_user CHANGE id id INT ;

2.唯一约束

## 唯一约束 关键字: UNIQUE## 值唯一,允许有一个null/*唯一约束与主键约束的区别:1. 唯一约束:值唯一,允许有一个null, 主键约束:值唯一,不允许有null,2. 一张表可以有多个唯一约束, 但只能有一个主键约束*/

CREATE TABLE tb_user( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(30) UNIQUE, `password` VARCHAR(30), gender VARCHAR(2))INSERT INTO tb_user(username,`password`,gender)VALUES('zhangsan','123','男');INSERT INTO tb_user(username,gender)VALUES('lisi','男');

3.非空约束

## 默认值约束 给某列设置一个默认值## 关键字: default## 没有设置默认值, 默认值null

## 关键字: default## 没有设置默认值, 默认值nullCREATE TABLE tb_user(id INT PRIMARY KEY,username VARCHAR(30) UNIQUE NOT NULL,`password` VARCHAR(30) NOT NULL,gender VARCHAR(2) DEFAULT '男')INSERT INTO tb_user(username,`password`,gender)VALUES('zhangsan1','123','女');INSERT INTO tb_user(username,`password`)VALUES('lisi','123');

4.检查约束

##检查约束 关键字 check 在mysql8才有## 限制值的范围 check gender='女' or gender='男'

5.外键约束

## 外键: 维护表与表关系, ##A表与B表的关系, 在B表中添加一列, 引用A表的某列的值## 添加的一列是外键## 外键约束: 限制外键的值的范围, 外键列的值的范围, 只能是引用表中引用列的值## 在互联网开发中, 外键一定有的, 但是外键约束一般不加

## 订单表: ## userId的值必须来源tb_user的id的值/*创建表的时候: 外键取名: fk_表名_列名[ CONSTRAINT ] [ 外键名称 ] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)*/DROP TABLE tb_order; #从表DROP TABLE tb_user; #主表CREATE TABLE tb_order(id INT PRIMARY KEY AUTO_INCREMENT,createTime DATETIME,price DOUBLE(7,2),userId INT,CONSTRAINT fk_tb_order_userId FOREIGN KEY(userId) REFERENCES tb_user(id))INSERT INTO tb_order(createtime,price,userId) VALUES('-08-12 08:57:43',199,1);INSERT INTO tb_order(createtime,price,userId) VALUES('-08-13 09:57:43',199,3);

/*使用外键约束:创建表的顺序: 先主表,再从表删除表的顺序: 先从表,再主表外键约束 引用的主表列必须是主键约束或者是唯一约束*/

#第二种创建外键约束:# 对存在的表添加一个外键约束:#ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ;CREATE TABLE tb_order(id INT PRIMARY KEY AUTO_INCREMENT,createTime DATETIME,price DOUBLE(7,2),userId INT)ALTER TABLE tb_order ADD CONSTRAINT fk_tb_order_userId FOREIGN KEY(userId)REFERENCES tb_user(id);##外键约束删除数据,修改外键数据的操作## 删除:## 删除id为1的用户## 如果主表这条记录在从表有引用,默认删除失败DELETE FROM tb_user WHERE id = 1;/*NO ACTION: 默认行为 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 RESTRICT 一致) 默认行为CASCADE: 级联删除/修改 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录SET NULL: 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)*/##CASCADE:ALTER TABLE tb_order ADD CONSTRAINT fk_tb_order_userId FOREIGN KEY(userId)REFERENCES tb_user(id) ON UPDATE CASCADE ON DELETE CASCADE;DELETE FROM tb_user WHERE id = 1;

如果觉得《六 约束(主键约束 唯一约束 非空约束 检查约束 外键约束)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。