MySQL约束
create table [if not exists] 表名( 字段名1 类型[(宽度)] [约束条件] [comment '字段说明'], 字段名2 类型[(宽度)] [约束条件] [comment '字段说明'], 字段名3 类型[(宽度)] [约束条件] [comment '字段说明'] )[表的一些设置];
-
概念
约束英文:constraint
约束实际上就是表中数据的限制条件
-
作用
表再设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复。
-
分类
-
主键约束(primary key) PK
-
自增长约束(auto_ increment)
-
非空约束(not_null)
-
唯一性约束(unique)
-
默认约束(default)
-
零填充约束(zerofill)
-
外键约束(foreign key) FK
-
主键约束
-
概念
MySQL主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行,方便再RDBMS中尽快的找到某一行。
主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。
每个表最多只允许一个主键
主键约束的关键字是:primary key
当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
操作
-
添加单列主键
-
添加多列联合主键
-
删除主键
-
①:添加单列主键
创建单列主键有两种方式,一种是在定义字段的同时指定主键,一种是定义完字段之后指定主键
方式1-语法:
在 create table 语句中,通过 primary key 关键字来指定主键。 在定义字段的同时指定主键,语法格式如下: create table 表名( ... <字段名><数据类型> primary key ... )
方式1-实现:
在定义字段之后再指定主键,语法格式如下: create table 表名( ... [constraint<约束名>] primary key[字段名] ) 数据修改 格式 create table if not exists emp( sid int primary key, sname varchar(20), deptid int, salary double );
方式2-实现:
create table emp2( eid INT, name VARCHAR(20), deptId INT, salary double, constraint pk1 primary key(id) )
主键不能重复 insert into emp(sid, sname, deptid, salary) VALUES (1001,'tom',1,122.34); insert into emp(sid, sname, deptid, salary) VALUES (1002,'jerry',1,122.34); 主键不能为空 insert into emp(sid, sname, deptid, salary) VALUES (null,'tom',1,122.34);
②:联合主键
所谓的联合主键,就是这个主键是由一张表中多个字段中有多个字段组成的。
注意:
1:当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。
2:一张表只能有一个主键,联合主键也是一个主键
语法:
create table 表名( ... primary key(字段1,字段2,...,字段n) )
实现:
create table emp3( name varchar(20), deptId int, salary double, primary key(name,deptId) ) insert into emp3(name, deptId, salary) VALUES ('tom',1,1200.12); insert into emp3(name, deptId, salary) VALUES ('tom',1,1200.12); insert into emp3(name, deptId, salary) VALUES ('jerry',1,1200.12); insert into emp3(name, deptId, salary) VALUES (null,1,1200.12);
③:添加主键
主键约束不仅可以在创建表的同时创建,也可以在修改表时添加。
语法:
create table 表名( ... ); alter table <表名> add primary key(字段列表);
实现:
添加主列主键 create table emp5( eid int, name varchar(20), deptId int, salary double ); alter table emp5 add primary key(name,deptId);
④:删除主键
一个表中不需要主键约束时,就需要从表中将其删除。删除主键约束的方法要比创建主键约束容易的多。
格式:
alter table <数据表名> drop priamry key;
实现:
删除单列主键 alter table emp1 drop primary key; 删除联合主键 alter table emp5 drop primary key;
自增长约束
- 概念
在MySQL中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。
通过给字段添加auto_increment属性来实现主键自增长
- 语法
字段名 数据类型 auto_increment
- 操作
create table t_user1( id int primary key auto_increment, name varchar(20) );




非空约束

唯一约束


默认约束


零填充约束
