mysql字段约束
1.前言
之前一直想着整理mysql字段约束相关的知识,但是这个知识之前只是知道个大概,这次正好看到一个帖子讲的挺好,顺便好好的整理一下
2.字段约束种类
- 主键(primary key)
- 唯一(unique)
- 非空(not null)
- 外键约束
3.示例
主键(primary key)
特点:唯一且不能为空!!!
当主键为数值时,为了方便维护,可以设置主键为自增(auto_increment)
示例:创建user表,指定id为主键, 并指定主键自增
第一种方式:主键自增和主键声明放一起
create table user(
id int primary key auto_increament,
name varchar(50)
......
);
第二种方式:主键自增放在最后
create table user(
id int auto_increament,
name varchar(50) ,
......,
primary key(id)
);
唯一(unique)
特点:唯一约束特点是不能重复!!(允许为空)
重点说明:
唯一约束,可以为空
允许为空
示例:创建user表, 指定用户名不能重复
create table user(
id int primary key auto_increament,
username varchar(50) unique,
...
);
非空(not null)
特点:不能为空值, 即插入数据时该列必须得有值!!
示例:创建user表, 指定密码不能为空
create table user(
id int primary key auto_increament,
username varchar(50) unique,
password varchar(50) not null,
...
);
外键
示例:员工部门表,员工表设置部门id为外键
第一种方式:建表的时候指明外键
-- 创建部门表
create table dept(
id int primary key auto_increment, -- 部门编号
name varchar(20) -- 部门名称
);
-- 创建员工表
create table emp(
id int primary key auto_increment, -- 员工编号
name varchar(20), -- 员工姓名
dept_id int, -- 部门编号
foreign key(dept_id) references dept(id) -- 指定dept_id为外键
);
第二种方式:如果表已存在,可以使用下面这种方式:
-- 创建部门表
create table dept(
id int primary key auto_increment, -- 部门编号
name varchar(20) -- 部门名称
);
-- 创建员工表
create table emp(
id int primary key auto_increment, -- 员工编号
name varchar(20), -- 员工姓名
dept_id int -- 部门编号
);
-- 如果表已存在,可以使用下面这种方式:
alter table emp add constraint fk_dept_id foreign key(dept_id) references dept(id);
其中 add constraint fk_dept_id 表示新增列,列名为**fk_dept_id** (名字由自己定义)
说明:
一般情况下,我们表是不设置外键的,因为外键的设置导致很多操作不方便
4.重点说明
-
唯一(unique)约束是可以设置空值的
-
正常情况下不设置外键