欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;

外键约束

当一个表中需要使用到另一个表的的数据时,但是又要保证数据的正确性,可以是用外键约束。如下图
MySQL约束看完这篇文章就够了

-- 创建部门表(主表)
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;