主键约束的相关术语:
- 主键约束:就是一种约束
- 主键字段:该字段上添加了主键约束,这样的字段叫做:主键字段
- 主键值:主键字段中的每一个值叫做:主键值
什么是主键?有啥用?
主键值是每一个记录的唯一标识
主键值是每一行记录的身份证号
任何一张表都应该有主键,没有主键,表无效
主键的特征:not null + unique(主键值不能是null,同时也不能重复)
给一张表添加主键约束
drop table if exists t_vip;create table t_vip(#一个字段做主键叫做:单一主键id int primary key, #列级约束name varchar(255));insert into t_vip(id,name) values (1,'zhangsan');insert into t_vip(id,name) values (2,'lisi');#错误,主键不能重复insert into t_vip(id,name) values (2,'wangwu');select * from t_vip;insert into t_vip(name) values ('zhaoliu'); #错误,主键不能为空#主键可以使用表级约束create table t_vip(id int,name varchar(255),primary key(id) #表级约束);insert into t_vip(id,name) values (1,'zhangsan');insert into t_vip(id,name) values (2,'lisi');#错误:重复insert into t_vip(id,name) values (2,'wangwu');#表级约束主要是给多个字段联合起来添加约束create table t_vip(#id和name联合起来做主键:复合主键id int,name varchar(255),email varchar(255),primary key(id,name));insert into t_vip(id,name,email) values (1,'zhangsan','zhangsan@123.com');insert into t_vip(id,name,email) values (1,'lisi','lisi@123.com');select * from t_vip;#错误:不能重复insert into t_vip(id,name,emali) values (1,'zhangsan','abc@123.com');#错误: Multiple primary key defined 一张表,主键约束只能添加一个create table t_vip(id int primary key,name varchar(255) primary key);
主键值建议使用:
- int
- bigint
- char
- 等类型
不建议使用:varchar来做主键,主键值一般都是数字,一般都是定长的
主键:除了单一主键和复合主键之外,还可以这样进行分类
- 自然主键:主键值是一个自然数,和业务没关系
- 业务主键:主键值和业务紧密关联,例如拿银行卡账号做主键值,这就是业务主键
实际开发中自然主键使用比较多,因为主键只要做到不重复就行,不需要有意义
业务主键不好,因为主键一旦与业务挂钩,那么当业务发生变动的时候,可能会影响
到主键值,所以业务主键不建议使用,尽量使用自然主键
#mysql中,有一种机制,可以帮助自动维护一个主键值
create table t_vip(
id int primary key auto_increment,
name varchar(255)
);
insert into t_vip(name) values ('张三');
insert into t_vip(name) values ('张三');
insert into t_vip(name) values ('张三');
insert into t_vip(name) values ('张三');
insert into t_vip(name) values ('张三');
insert into t_vip(name) values ('张三');
insert into t_vip(name) values ('张三');
select * from t_vip;
