主键约束、主键自增约束、唯一约束、非空约束、外键约束

1. 约束的概念和分类

约束:对表中的数据进行限定,保证数据的正确性、有效性、完整性!

约束分类:

约束说明
PRIMARY KEY主键约束
PRIMARY KEY AUTO_INCREMENT主键、自动增长
UNIQUE唯一约束
NOT NULL非空约束
FOREIGN KEY外键约束
FOREIGN KEY ON UPDATE CASCADE外键级联更新
FOREIGN KEY ON DELETE CASCADE外键级联删除

2. 主键约束

-- 创建学生表将学号设置为主键
CREATE TABLE student(
	id INT PRIMARY KEY,
	NAME VARCHAR(30),
	age INT
);

-- 添加数据
INSERT INTO student VALUES(1,'杨过',26);
INSERT INTO student VALUES(2,'小龙女',30);

-- 删除主键
ALTER TABLE student DROP PRIMARY KEY;
INSERT INTO student VALUES(1,'尹志平',30);

-- 建表后添加主键
DELETE FROM student WHERE NAME = '尹志平';
ALTER TABLE student MODIFY id INT PRIMARY KEY;

3. 主键自增约束

-- 删除原先学生表
DROP TABLE student;
-- 新建学生表,学号设置为主键自增
CREATE TABLE student(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20),
	age INT
);

-- 添加数据
INSERT INTO student VALUES (NULL,'杨康',35),(NULL,'穆念慈',26);

-- 删除自增约束,主键还在
ALTER TABLE student MODIFY id INT;
DESC student
INSERT INTO student VALUES (3,'杨过',15);

-- 建表后单独添加自增约束
ALTER TABLE student MODIFY id INT AUTO_INCREMENT;

4. 唯一约束

-- 删除原先学生表
DROP TABLE student;
-- 新建学生表,学号设置为主键自增,姓名设置唯一约束
CREATE TABLE student(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20) UNIQUE,
	age INT
);
DESC student;

-- 添加数据
INSERT INTO student VALUES (NULL,'张三',23);
INSERT INTO student VALUES (NULL,'李四',24);

-- 删除唯一约束
ALTER TABLE student DROP INDEX NAME;

-- 建表后单独添加唯一约束
ALTER TABLE student MODIFY NAME VARCHAR(20) UNIQUE;

5. 非空约束

-- 删除原先学生表
DROP TABLE student;
-- 新建学生表,学号设置为主键自增,姓名设置唯一约束,年龄设置为非空约束
CREATE TABLE student(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20) UNIQUE,
	age INT NOT NULL
);
DESC student;

-- 添加数据
INSERT INTO student VALUES (NULL,'张三',23);

-- 删除非空约束
ALTER TABLE student MODIFY age INT;

-- 建表后单独添加非空约束
ALTER TABLE student MODIFY age INT NOT NULL;

6. 外键约束

让表和表之间产生关系,从而保证数据的准确性!

USE liulu
-- 创建user用户表
CREATE TABLE USER(
	id INT PRIMARY KEY AUTO_INCREMENT,    -- id
	NAME VARCHAR(20) NOT NULL             -- 姓名
);
-- 添加用户数据
INSERT INTO USER VALUES (NULL,'张三'),(NULL,'李四');

-- 创建orderlist订单表
CREATE TABLE orderlist(
	id INT PRIMARY KEY AUTO_INCREMENT,    -- id
	number VARCHAR(20) NOT NULL,          -- 订单编号
	uid INT,			      -- 外键列
	CONSTRAINT ou_fk1 FOREIGN KEY (uid) REFERENCES USER(id)
);
-- 添加订单数据
INSERT INTO orderlist VALUES 
(NULL,'hm001',1),(NULL,'hm002',1),
(NULL,'hm003',2),(NULL,'hm004',2);

-- 添加一个订单,但是没有真实用户。添加失败
INSERT INTO orderlist VALUES (NULL,'hm005',3);

-- 删除李四用户。删除失败
DELETE FROM USER WHERE NAME='李四';

-- 删除外键约束
ALTER TABLE orderlist DROP FOREIGN KEY ou_fk1;

-- 建表后单独添加外键约束
ALTER TABLE orderlist ADD CONSTRAINT ou_fk1 FOREIGN KEY (uid) REFERENCES USER(id);

7. 级联更新和级联删除

-- 外键联级更新和删除

-- 删除外键约束
ALTER TABLE orderlist DROP FOREIGN KEY ou_fk1;

-- 添加外键约束,同时添加级联更新和级联删除
ALTER TABLE orderlist ADD CONSTRAINT ou_fk1 FOREIGN KEY (uid) REFERENCES USER(id)
ON UPDATE CASCADE ON DELETE CASCADE;


-- 将李四这个用户的id修改为3,订单表中的uid也自动修改
UPDATE USER SET id=3 WHERE id=2;

-- 将李四这个用户删除,订单表中的该用户所属的订单也自动删除
DELETE FROM USER WHERE id=3;

如有错误欢迎留言评论,2021年7月9日  羽露风

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽露风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值