约束:对表中的数据进行限定,保证数据的正确性、有效性、完整性!
约束分类:
约束 | 说明 |
---|---|
PRIMARY KEY | 主键约束 |
PRIMARY KEY AUTO_INCREMENT | 主键、自动增长 |
UNIQUE | 唯一约束 |
NOT NULL | 非空约束 |
FOREIGN KEY | 外键约束 |
FOREIGN KEY ON UPDATE CASCADE | 外键级联更新 |
FOREIGN KEY ON DELETE CASCADE | 外键级联删除 |
-- 创建学生表将学号设置为主键
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;
-- 删除原先学生表
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;
-- 删除原先学生表
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;
-- 删除原先学生表
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;
让表和表之间产生关系,从而保证数据的准确性!
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);
-- 外键联级更新和删除
-- 删除外键约束
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日 羽露风