数据库约束说明
非空约束:保证列中所有数据不能有null值 NOT NULL
唯一约束:保证列中所有数据各不相同 UNIQUE
主键约束:主键是一行数据的唯一标识,要求非空且唯一 PRIMARY KEY
检查约束:保证列中的值满足某一条件 CHECK
默认约束:保存数据时,未指定值则采用默认值 DEFAULT
外键约束:外键用来让两个表的数据之间建立连接,保证数据的一致性和完整性 FOREIGN KEY
示例
员工表(emp)
id | ename | joindate | salary | bonus |
---|---|---|---|---|
1 | 张三 | 1999-11-13 | 6600 | 5000 |
演示主键约束:非空且唯一
-- 正确示例
insert into emp(id, ename, joindate, salary, bonus) values(1, '张三', '1999-11-13', 6600, 5000);
-- 错误示例
insert into emp(id, ename, joindate, salary, bonus) values(null, '张三', '1999-11-13', 6600, 5000);
insert into emp(id, ename, joindate, salary, bonus) values(1, '张三', '1999-11-13', 6600, 5000);
insert into emp(id, ename, joindate, salary, bonus) values(2, '李四', '1999-11-13', 6600, 5000);
非空约束
-- 错误示例,ename为null
insert into emp(id, ename, joindate, salary, bonus) values(3, null, '1999-11-13', 6600, 5000);
唯一约束
-- 错误示例,ename重复
insert into emp(id, ename, joindate, salary, bonus) values(3, '张三', '1999-11-13', 6600, 5000);
默认约束
-- 正确示例,bonus未指定值,采用默认值0
insert into emp(id, ename, joindate, salary) values(3, '李华', '1999-11-13', 6600);
自增长
-- 正确示例,id自增长
insert into emp(ename, joindate, salary, bonus) values('李四', '1999-11-13', 6600, 5000);
外键约束
部门表(dept)
id | dep_name | addr |
---|---|---|
1 | 研发部 | 广州 |
2 | 销售部 | 深圳 |
员工表(emp)
id | name | age | dep_id |
---|---|---|---|
1 | 张三 | 20 | 1 |
2 | 李四 | 20 | 1 |
3 | 王五 | 20 | 1 |
4 | 赵六 | 20 | 2 |
5 | 李华 | 22 | 2 |
6 | 周七 | 18 | 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, 2),
('李华', 22, 2),
('周七', 18, 2);
删除外键
如果需要删除外键约束,可以使用以下的语法:
-- 删除外键
alter table 表名 drop foreign key 外键名;
例如,在示例中我们可以执行以下命令删除emp表中dep_id列的外键约束:
alter table emp drop foreign key fk_emp_dept;
请注意,外键约束的删除可能需要数据库管理员或具有相应权限的用户执行。