七、MYSQL常见的约束
- 主键约束(primary key) PK
- 自增长约束(auto_increment)
- 非空约束(not null)
- 唯一性约束(unique)
- 默认值约束(default)
- 零填充约束(zerofill)
- 外键约束(foreign key)FK
案例演示:
下面的案例将一次性演示:主键约束、自增长约束、非空约束、唯一性约束、默认约束、零填充约束。
use school; #切换到school库 create table if not exists tt01 ( #创建表tt01 id int(4) zerofill primary key auto_increment, #对id字段设置零填充约束、主键约束、自增长约束 name varchar(10) not null default '匿名', #对name字段设置非空约束、默认值约束 cardid int(18) not null unique key, #对cardid字段设置非空约束、唯一键约束 hobby varchar(50)); -----------以下为注释----------------------------------- if not exists: 表示检测要创建的表是否已存在,如果不存在就继续创建。如果存在就忽略,不进行创建。 int(4) zerofill: 零填充约束,表示若数值不满4位数,则前面用“0”填充到4位,例0001,0012。 #int(11) zerofill:表示若数值不满11位数,则前面用“0”填充到11位,例如00000001234。 primary key: 表示此字段有主键约束,此字段数据不可以重复且不允许为NULL,一张表中只能有一个主键。 auto_increment: 表示此字段为自增长字段,即每条记录自动递增1。 一个表中只能有一个字段使用auto_increment约束,且该字段必须有唯一索引,以避免序号重复。 如果不指定则默认从1开始递增; 自增长字段数据不可以重复; 自增长字段必须是主键; 如果添加的记录数据没有指定此字段的值,那么添加失败也会自动递增一次。 auto_increment约束的字段只能是整数型。 unique key: 表示此字段有唯一键约束,此字段数据不可以重复;一张表中只能有一个主键,但是一张表中可以有多个唯一键。 not null: 表示此字段不允许为NULL。 default '匿名': 表示该字段的默认值为“匿名”。 复制代码
插入数据记录:
1)因为id字段设置了自增长,如果不指定id字段值,则默认从1开始递增;
int(4) zerofill ,设置了零填充约束,如果数值不满4位数,则前面用“0”填充到4位,所以下面案例中的id值为0001。
INSERT INTO tt01(name,cardid,hobby) values('小明',1101,'running'); 复制代码
2)再次插入数据记录,不指定id字段值,则id值会自增1,此时为0002。
INSERT INTO tt01(name,cardid,hobby) values('小红',1102,'running'); 复制代码
3)自增长,如果添加失败也会自动递增一次,数值会被占用。
#下面两条命令会执行失败,因为cardid设置了唯一键不能重复。但执行失败,id值也会自增,0003、0004这两个数值会被占用。 INSERT INTO tt01(name,cardid,hobby) values('小强',1102,'singing'); INSERT INTO tt01(name,cardid,hobby) values('小方',1102,'running'); #下面这条命令执行成功后,id值是0005,因为0003和0004被执行失败的命令占用了。 INSERT INTO tt01(name,cardid,hobby) values('小丽',1103,'singing'); 复制代码
4)插入数据记录,指定id值为10。
则后面插入的数据就会从10开始自增1,即增长为11。
INSERT INTO tt01 values(10,'小强',1104,'singing'); #指定id值为10 INSERT INTO tt01(name,cardid,hobby) values('小方',1105,'dancing'); #后面插入的数据id值是11 复制代码
5)cardid字段设置了唯一键约束,如果字段值重复,则会数据会插入失败。
#cardid重复,数据会添加失败 INSERT INTO tt01(name,cardid,hobby) values('小平',1105,'dancing'); 复制代码
6)name字段设置了不允许为NULL,且默认值为“匿名”,则插入数据时如果不指定name字段的值,该字段会自动插入默认值“匿名”。
INSERT INTO tt01(cardid,hobby) values(1106,'dancing'); 复制代码
总结
查看数据库和表:
show databases;
use 库名;
show tables;
desc 表名;
desc 表名\G
show create table 表名;
创建及删除数据库和表:
create database 库名;
create table 表名(字段1 数据类型 [属性], 字段2 .....);
DROP TABLE [数据库名.]表名;
DROP DATABASE 数据库名;
表数据的增删改查:
insert into 表名 values (所有字段的值);
insert into 表名 (指定字段名称) values(字段的值);
delete from 表名 [where ...];
truncate table 表名; #删除表中所有数据。相当于格式化,速度很快
update 表名 set 字段=值[, 字段2=....] [where ...];
select 字段1[,字段2....] from 表名 [where ...];
select * from 表名;
修改表名和表结构:
alter table 表名 RENAME/ADD/CHANGE/DROP 字段名 数据类型 属性;
alter table 表名 ADD 键名(字段); //给指定字段添加键约束
注:零填充约束、非空约束、默认约束、自增长约束不能通过ADD方式添加,可以在建表时设置,或者CHANGE修改字段时添加。
主键和唯一键:
主键:primary key
唯一键:unique key
共同点: 字段的值都是唯一性,不允许有重复的值
不同点:
- 一个表中 只能有1个主键,但是可以有多个唯一键
- 主键字段中不允许有null值,唯一键是允许有null
添加主键字段的三种方法:
创建表时指定主键字段的两种方式:
- create table 表名 (字段1 XXX,字段2 xxx,...,primary key(字段));
- create table 表名 (字段1 XXX primary key, ....);
在现有表中添加主键:
- alter table 表名 ADD primary key(字段);