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

主键约束、主键自增约束、唯一约束、非空约束、外键约束_第1张图片

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日  羽露风

你可能感兴趣的:(基础,mysql)