MySQL约束看完这篇文章就够了
程序员文章站
2024-03-25 20:26:46
...
约束
约束用来对表中的数据进行限定,保证数据的正确性,完整性和有效性。
这里我们学习4中约束,【主键约束】【非空约束】【唯一约束】【外键约束】
非空约束:not null
唯一约束:unique
主键约束:primary key
外键约束:foreign key
非空约束
非空约束指某一列的值不能为NULL
-- 创建stu表,添加name属性的非空约束
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) NOT NULL -- name非空约束
);
-- 删除name字段非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
-- 添加name字段非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
唯一约束
唯一约束指表中同一列不同有重复的数据
-- 创建stu2表,添加phonenumber字段唯一约束
CREATE TABLE stu2(
id INT,
phonenumber VARCHAR(20) UNIQUE
);
-- 删除唯约束
ALTER TABLE stu2 DROP INDEX phonenumber;
-- 创建表之后给phonenumber添加唯一约束
ALTER TABLE stu2 MODIFY phonenumber VARCHAR(20) UNIQUE;
主键约束
主键约束 用来作为表记录中的唯一标识,一张表只能哟一个主键约束
特点:非空且唯一
--创建表示给id添加主键约束
CREATE TABLE stu3(
id INT PRIMARY KEY, -- 给id添加主键约束
NAME VARCHAR(20)
);
-- 删除id的主键约束
ALTER TABLE stu3 DROP PRIMARY KEY;
-- 给id添加主键约束
ALTER TABLE stu3 MODIFY id PRIMARY KEY;
主键约束自动增长
如果某一列的数据是数值类型,并且每条记录递增1,可以让其自动增长(AUTO_INCREMENT)
-- 设置id主键自动增长
CREATE TABLE stu4(
id INT PRIMARY KEY AUTO_INCREMENT -- 给主键id 添加自动增长
NAME VARCHAR(20)
);
-- 删除自动增长
ALTER TABLE stu4 MODIFY id INT;
-- 添加主键自动增长
ALTER TABLE stu4 MODIFY id INT PRIMARY KEY AUTO_INCREMENT;
外键约束
当一个表中需要使用到另一个表的的数据时,但是又要保证数据的正确性,可以是用外键约束。如下图
-- 创建部门表(主表)
CREATE TABLE department(
id INT PRIMARY KEY AUTO_INCREMENT,
dep_name VARCHAR(20),
dep_location VARCHAR(20)
);
-- 添加 2 个部门
INSERT INTO department VALUES(NULL, '研发部','广州'),(NULL, '销售部', '深圳');
SELECT * FROM department;
-- 创建员工表(从表)
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT,
dep_id INT, -- 外键对应主表的主键
CONSTRAINT emp_depid_fk FOREIGN KEY(dep_id) REFERENCES department(id) -- 添加外键约束
);
-- 添加6个员工记录
INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('中王', 19, 2);
SELECT * FROM employee;
删除、添加已有表的外键
-- 删除已有表的外键
ALTER TABLE employee DROP FOREIGN KEY emp_depid_fk;
-- 添加已有表的外键
ALTER TABLE employee ADD CONSTRAINT emp_depid_fk FOREIGN KEY(dep_id) REFERENCES department(id);
外键约束级联操作
外键让多个表之间产生了关系,但是如果主表中的数据所有改变,从表中关联的数据也必须跟着改变。这叫做外键级联操作。
-- 删除主键
ALTER TABLE employee DROP FOREIGN KEY emp_depid_fk;
-- 添加外键级联更新、级联删除
-- ON UPDATE CASCADE 级联更新
-- ON DELETE CASCADE 级联删除
ALTER TABLE employee ADD CONSTRAINT emp_depid_fk FOREIGN KEY(dep_id) REFERENCES department(id) ON UPDATE CASCADE ON DELETE CASCADE;