五、mysql—约束

一、约束的概念和分类

  • 约束的概念
  1. 约束是作用于表中 列上的规则,用于限制加入表的数据
  2. 约束的存在保证了数据库中数据的正确性、有效性和完整性

分类:
在这里插入图片描述
Tips:mysql不支持检查约束
eg:

CREATE TABLE EMP(
	ID INT PRIMARY KEY,-- 员工id,主键且自增长
	ENAME VARCHAR(50) NOT NULL UNIQUE,-- 员工姓名,非空且唯一
	JOINDATE DATE NOT NULL,-- 入职日期,非空
	SALARY DOUBLE(7,2) NOT NULL,-- 工资,非空
	BONUS DOUBLE(7,2) DEFAULT 0-- 奖金,如果没有奖金默认值为0
);

-- 演示主键约束:非空且唯一
INSERT INTO EMP VALUES(1,'张三','1999-11-11',8000,9000);
INSERT INTO EMP VALUES(null,'张三','1999-11-11',8000,9000); -- 创建失败,主键不能为空
INSERT INTO EMP VALUES(1,'李四','1999-11-11',8000,9000);  -- 创建失败,主键唯一

-- 演示非空约束
INSERT INTO EMP VALUES(2,null,'1999-11-11',8000,9000);-- 创建失败,姓名not null非空

-- 演示唯一约束
INSERT INTO EMP VALUES(2,'李四','1999-11-11',8000,9000);
INSERT INTO EMP VALUES(3,'李四','1999-11-11',8000,9000);-- 创建失败,姓名unique唯一

-- 演示默认约束
INSERT INTO EMP(id,ename,joindate,salary) VALUES(4,'王五','1999-11-11',8000);-- 创建成功,bonus默认值为0

-- 演示自动增长:auto_increment:当列是数字类型并且 唯一约束
CREATE TABLE EMP(
	ID INT PRIMARY KEY auto_increment,
	ENAME VARCHAR(50) NOT NULL UNIQUE,
	JOINDATE DATE NOT NULL,
	SALARY DOUBLE(7,2) NOT NULL,
	BONUS DOUBLE(7,2) DEFAULT 0
);
INSERT INTO EMP(ename,joindate,salary) VALUES('王五','1999-11-11',8000); -- 创建成功,因为自增长,即使不填
INSERT INTO EMP(id,ename,joindate,salary) VALUES(null,'王五1','1999-11-11',8000);-- 创建成功,因为自增长,即使为空

*二、演示外键约束:

  • 添加约束:
    在这里插入图片描述
    在这里插入图片描述
  • 删除约束
    在这里插入图片描述

eg:
在这里插入图片描述

员工表的 dep_id 列 与 部门表的 id 列进行关联

-- 部门表
CREATE TABLE dept(
	id int primary key auto_increment,
	dep_name varchar(20),
	addr varchar(20)
);

-- 员工表
drop table if EXISTS emp;
CREATE TABLE emp(
	id int primary key auto_increment,
	name varchar(20),
	age int,
	dep_id int,

-- 添加外键 dep_id,关联 dept 表的id主键
	CONSTRAINT fk_emp_dept foreign key(dep_id) references dept(id)
);

-- 添加2个部门
insert into dept(dep_name ,addr) values ('研发部','广州'),('销售部','深圳');

-- 添加员工,dep id 表示员工所在的部门
INSERT INTO emp(NAME,age,dep_id)VALUES
('张三',20,1),
('李四',20,1),
('王五',20,1),
('赵六',20,1),
('孙七',22,1),
('周八',18,2);

--删除外键
alter table emp drop FOREIGN key fk_emp_dept;

-- 建完表后,添加外键
alter table emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值