MySQL约束看完这篇文章就够了

约束

约束用来对表中的数据进行限定,保证数据的正确性,完整性和有效性。

这里我们学习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;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值