1.主键约束
概念:
唯一的标识每一行,方便在RBDMS中尽快找到某一行
主键约束=唯一约束(不允许重复)+非空约束(不允许出现空值)
每个表最多只有一个主键
关键字:prinmary key
当创建主键约束时,系统默认在所在列或者列组合上建立唯一索引
操作
添加单列主键(两种方式)
(1)在定义字段时添加主键
use mydb1;
create table emp1(
eid int primary key,#在定义eid时添加主键
name VARCHAR(20),
deptTd int,
salary double
);
(2)在定义字段之后再添加主键
create table emp2(
eid INT,
name VARCHAR(20),
deptid INT,
salary double,
constraint pk1 primary key(id)#(constraint pk1可以省略)
);
主键不能重复
insert into emp2(eid,name,deptId,salary) values(1001,'张总','10',10,5000);
insert into emp2(eid,name,deptId,salary) values(1001,'张1总','110',110,50000);
注意:联合主键的每一列都不能为空
添加多列主键(联合主键)
注意:当主键是由多个字段组成,不能直接在字段后面声明主键约束。一张表只能有一个主键,联合主键也是一个主键。
实现:
create table emp3(
name varchar(20),
deptId int,
salary dounle,
primary key(name,deptId)#name和depid合在一起作为一个主键
);
通过修改表结构添加主键
在修改表时添加主键
create table emp4(
eid int,
name varchar(20),
deptid int,
salary double,
);
alter table emp4 add primary key (eid);
删除主键
--删除单列主键
alter table emp1 drop primary key;
--删除联合主键
alter table emp5 drop primary key;
2.MySQL-自增长约束(auto_increment)
概念
在MySQL中,当主键定义为自增长后,这个主键的值就不需要用户再输入数据了,而由数据库系统定义自动赋值。每增加一条记录,主键以相同的步长进行增长。
通过给字段添加auto_increment属性来增加主键自增长。
操作
create table t_user1(
id int primary key auto_increment,
name varchar(20)
);
即使不给主键赋值,也默认给值(从1)
insert into t_user1 values(NULL,'张三');#不给id值
insert into t_user1(name) values('李四');
特点
默认情况下,auto_increment的初始值为1,每新增一条记录,字段字段增加1.
一个表中只有一个字段使用auto_increment约束,且该字段必须有唯一的索引,以避免序号重复(即为主键或者主键的一部分)
auto_increment约束字段必须具备NOT NULL属性。
auto_increment约束字段只能是整数类型
auto_increment约束字段的最大值受该字段的数据类型约束,如果达到上限,auto_increment就会失效。
指定自增长字段初始值
如果第一条记录设置了该字段的初始值,那么新增加的记录就会从这个初始值自增。例如,如果表中插入的第一条记录的id值设置为5,那么再插入记录时,id值就会从5开始自增长。
--方式1,创建表时指定
create table t_user2(
id int primary key auto_increment,
name varchar(20)
)auto_increment=100;
delete和truncate在删除后自增列的变化
delete数据之后自增长从断点开始
truncate数据之后自动增长从默认起始值开始
3.MySQL非空约束
概念
MySQL非空约束(not null)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。
实现
添加非空约束
--方式1 创建表时指定
create table t_yser6(
id int,
name varchar(20) not null,
adress varchar(20) not null
);
--方式2,创建表之后指定
create table t_user7(
id int,
name varchar(20),
address varchar(20)
);
alter table t_user7 modify name varchar(20) not null;
alter table t_user7 modify address varchar(20) not null;
--注意
insert into t_user6(id) value(1001);--不可以
insert into t_user(id,name,address) value(1001,NULL,NULL);--不给值不可以
insert into t_user(id,name,address) value(1001,'NULL','NULL');--可以
insert into t_user(id,name,address) value(1001,'','');--空串可以
删除非空约束
alter table t_user7 modify name varchar(20) ;#把not null去掉,其他不变
alter table t_user7 modify address varchar(20) ;
4.MySQL唯一约束
概念
唯一约束(unique Key)是指所有记录中字段的值不能重复出现,例如,为ID字段假设唯一性约束后,每条字段的id值都是唯一的,不能出现重复的情况。
实现
create table t_user8(
id int,
name varchar(20),
phone_number varchar(20) unique
);
insert into t_user9 add conssraint unique_pn unique(phone_number);
--删除为一下约束
alter table t_user9 drop index unique_pn;
注意:NULL和任何值都不相同,和自己也不相同。
5.MySQL默认约束
概念
MySQL默认值约束用来指定某列的默认值
create table t_user10(
id int,
name varchar(20),
adress varchar(20) default '北京'
);
6.零填充约束(zerofill)
概念
插入数据时,当该字段的值长度小于定义的长度时,会在该值前面补上相应的0.
zerofill默认为int(10)
当使用zerofill时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128~+127,无符号为0~256.
实现
--添加
create table t_user12(
id int zerofill,
name varchar(20)
);
--删除
alter table t_user12 modify id int;