约束——非空约束&唯一性约束
* 本博客涉及到的数据为bjpowernode.sql,数据见文末,SQL文见MySQL入门(9)文末。
* 该数据有三张表,分别是部门表dept(deptno部门编号、dname部门名称、loc位置)、
员工表emp(empno工号、ename员工姓名、job职位、mgr直属领导工号、
hiredate入职日期、sal月薪、comm补贴、deptno部门编号)、
薪水等级表salgrade(grade等级、losal区间下限、hisal区间上限)
约束(constraint)
1、什么是约束,为什么要使用约束?
-约束对应的英语单词:constraint
-约束实际上就是表中数据的限制条件
-表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效。
2、约束包括哪些?
- 非空约束 (not null)
- 唯一性约束 (unique)
- 主键约束 (primary key) 简称 PK
- 外键约束 (foreign key) 简称 FK
- 检查约束【目前MYSQL不支持,oracle数据库支持】
3、非空约束
-not null 约束的字段,不能为NULL值,必须给定具体的数据,以保证该字段不为空
-创建表,给字段添加非空约束【创建用户表,用户的邮箱地址不能为空】
droptable if exists t_user;
createtable t_user(
idint(10),
namevarchar(32) not null,
emailvarchar(128)
);
mysql> desc t_user;
+-------+--------------+------+-----+---------+-------+
| Field | Type |Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| name |varchar(32) | NO | | NULL | |
| email | varchar(128) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
insert into t_user(id,name,email) values(1, 'jack', 'jack@bjpowernode.com');
mysql> select * from t_user;
+------+------+----------------------+
| id | name |email |
+------+------+----------------------+
| 1 | jack | jack@bjpowernode.com|
+------+------+----------------------+
insert into t_user(id,name,email) values(2, 'lisi@bjpowernode.com');
ERROR 1136 (21S01): Column count doesn't match value count atrow 1
4、唯一性约束
-unique约束的字段具有唯一性,不可重复
-创建用户表,保证邮箱地址
【列级约束】 字段后加unique
drop tableif exists t_user;
create table t_user(
idint(10),
namevarchar(32) not null,
emailvarchar(128) unique
);
insertinto t_user(id,name,email) values(1, 'jack', 'jack@bjpowernode.com