什么是主键?

主键概述
主键值是每一行记录的唯一标识(就是类似不能重复的身份证号)
任何一张表都应该有主键,没有主键表无效
主键的特征: not null + unique (不能为空,且不重复)
给一张表添加主键:
create table t_vip(
id int primary key, //列级约束
name varchar(255)
);
create table t_vip(
id int ,
name varchar(255),
primary key(id) //表级约束
);
添加主键约束
id 和name 联合起来做主键,叫做复合主键
create table t_vip(
id int ,
name varchar(255),
primary key(id,name) //表级约束
);
在实际开发中不建议使用复合主键
因为主键值存在的意义就是一行的唯一标识
主键数量
主键只能有一个,刚刚说的联合主键和这个情况不一样
主键值
建议使用,int ,bigint ,char 等类型
不建议使用varchar来做主键.主键值一般都是数字,一般都是定长的1
主键分类
根据主键字段的字段数量来划分:
- 单一主键(推荐的,常用的。)
- 复合主键(多个字段联合起来添加一个主键约束)(复合主键不建议使用,因为复合主键违背三范式。)
根据主键性质来划分:
- 自然主键:主键值最好就是一个和业务没有任何关系的自然数。(这种方式是推荐的)
- 业务主键:主键值和系统的业务挂钩,例如:拿着银行卡的卡号做主键,拿着身份证号码作为主键。(不推荐用)
最好不要拿着和业务挂钩的字段作为主键。因为以后的业务一旦发生改变的时候,主键值可能也需要随着发生变化,但有的时候没有办法变化,因为变化可能会导致主键值重复。
mysql提供主键值自增:
drop table if exists t_user;
create table t_user(
id int primary key auto_increment, // id字段自动维护一个自增的数字,从1开始,以1递增。
username varchar(255)
);
insert into t_user(username) values('a');
insert into t_user(username) values('b');
insert into t_user(username) values('c');
insert into t_user(username) values('d');
insert into t_user(username) values('e');
insert into t_user(username) values('f');
select * from t_user;
提示:Oracle当中也提供了一个自增机制,叫做:序列(sequence)对象。