约束
约束的概念和分类
1、 约束的概念
* 约束是作用于表中列上的规则,用于限制加入的数据
* 约束的存在保证了数据库中数据的正确性、有效性和完整性
2、 约束的分类(MySQL不支持检查约束)(数据大小的校验通常在java代码中进行)
约束名称 | 描述 | 关键字 |
非空约束 | 保证列中所有的数据不能有 null 值 | NOT NULL |
唯一约束 | 保证列中所有数据各不相同 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
检查约束 | 保证列中的值满足某一条件 | CHECK |
默认约束 | 保存数据时,未指定值则采用默认值 | DEFAULT |
外键约束 | 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性 | FOREIGN KEY |
3、 约束案例(非空、唯一、主键)
例:根据需求为表添加合适的约束
-- 员工表 create table emp ( id int, -- 员工 id ,主键且自增长 ename varchar(50), -- 员工姓名,非空且唯一 joindate date, -- 入职日期, 非空 salary double(7,2), -- 工资,非空 bonus double(7,2) -- 奖金,如果没有默认为0 );
答:(自增长:auto_increament : 当列是数字类型 且 唯一约束时,可以使用自增长)
create table emp ( id int PRIMARY KEY auto_increment, -- 员工 id ,主键且自增长 ename varchar(50) not null unique, -- 员工姓名,非空且唯一 joindate date not null, -- 入职日期, 非空 salary double(7,2) not null, -- 工资,非空 bonus double(7,2) default 0-- 奖金,如果没有默认为0 );
附属代码:
create database if not EXISTS db_0906; use db_0906; drop TABLE if EXISTS emp; -- 员工表 create table emp ( id int PRIMARY KEY auto_increment, -- 员工 id ,主键且自增长 ename varchar(50) not null unique, -- 员工姓名,非空且唯一 joindate date not null, -- 入职日期, 非空 salary double(7,2) not null, -- 工资,非空 bonus double(7,2) default 0-- 奖金,如果没有默认为0 ); select * from emp; INSERT into emp (id, ename, joindate, salary, bonus) values (1,'张三','1999-11-11',8800,5000); INSERT into emp (id, ename, joindate, salary, bonus) values (null,'张三','1999-11-11',8800,5000); -- 报错 主键为空 INSERT into emp (id, ename, joindate, salary, bonus) values (1,'李四','1999-11-11',8800,5000); -- 报错 主键唯一 -- 演示非空约束 INSERT into emp (id, ename, joindate, salary, bonus) values (2,NULL,'1999-11-11',8800,5000); -- 报错 -- 演示默认约束 INSERT into emp (id, ename, joindate, salary) values (3,'王五','1999-11-11',8800); -- bonus 默认为 0 但如果赋值为 null 值不会默认为0 仍为null INSERT into emp (id, ename, joindate, salary,bonus) values (3,'王五','1999-11-11',8800,NULL); -- bonus 为 null -- 演示自动增长:auto_increament: 当列是数字类型 且 唯一约束时,可以使用自增长 INSERT into emp (ename, joindate, salary, bonus) values ('赵六1','1999-11-11',8800,5000); INSERT into emp (id, ename, joindate, salary, bonus) values (NULL, '赵六2','1999-11-11',8900,5000);
4、 外键约束
(1)概念
外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
(2)语法
① 创建表时添加外键约束
create table 表名( 列名 数据类型, ...... [CONSTRAINT] [外键名称] FOREIGN KEY (外键列名) REFERENCES 主表(主表列名) );
② 建完表后添加外键约束(表名为从表的表名 )
ALTER TABLE 表名 add constraint 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
③删除外键
ALTER TABLE 表名 drop FOREIGN KEY 外键名称;
(3)外键可视化
附属代码:
-- ===============演示外键约束=============== drop table if EXISTS dept; drop table if EXISTS emp; -- 部门表 create table dept ( id int primary key auto_increment, dep_name varchar(20), addr varchar(10) ); -- 注意: 要先创建主表!才能创建关联 -- 员工表 create table emp( id int PRIMARY KEY auto_increment, name varchar(10), 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 ('研发部', '广州'), ('销售部', '深圳'); -- 添加员工 INSERT into emp (name, age, dep_id) values ('张三', 20, 1), ('李四', 20, 1), ('王五', 20, 1), ('赵六', 20, 2), ('孙七', 20, 2), ('周八', 20, 2); -- ======= select * from emp; select * from dept; -- 删除外键 alter table emp DROP foreign key fk_emp_dept ; -- 添加外键(创建完表之后) alter table emp add constraint fk_emp_dept FOREIGN KEY (dep_id) references dept(id);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示