主键(Primary key)
- 概念
主键用于唯一标识表中的每一条数据。
- 主键的特征:
不能重复, 不能为空。
- 示例
create table stu1(
id int auto_increment primary key, <------#主键
name varchar(20)
);
注意点:
auto_increment的字段必须是主键, 但是主键不一定是auto_increment的。
一个表只能有一个主键, 但是主键可以是1个或多个字段组成。
- auto_increment 自增长
- 自增长字段的值从1开始, 每次递增1。
- 自增长字段数据不可以重复, 合适生成唯一的id。
- 自增长字段可以使用null或者default来设置值。
- 自增长字段必须是主键 (primary key)。
- 错误示例
错误示例1
create table stu2(
id int auto_increment, <------#会报错, 自增长的字段必须是主键
name varchar(20)
);
错误示例2
create table stu3(
id1 int primary key,
id2 int primary key, <------#会报错,一张表只能有一个主键
name varchar(20)
);
- 正确示例
添加主键的第一种方式
create table stu4(
id1 int primary key, <------#直接指定主键字段
id2 int,
name varchar(20)
);
添加主键的第二种方式
create table stu5(
id1 int,
id2 int,
name varchar(20),
primary key(id1) <------#语句最后指定主键字段
);
添加主键的第三种方式
create table stu6(
id1 int,
id2 int,
name varchar(20)
);
没有主键的情况下添加主建
alter table stu6 add primary key(id1); <------#表创建完成后添加主键
- 联合主建
create table stu7(
id1 int,
id2 int,
name varchar(20),
primary key(id1,id2) <------#主键由两个字段组成
);
#不是指定两个主键, 一个primary key就是指定一个主键
#这里只出现了一个primary key, 所以只指定了一个主键
#只不过这个主键比较特殊, 是由两个字段共同组成的
- 联合主键的应用场景:
如果表中无论哪一个字段都无法保证数据的唯一性,可以使用多个字段组合在一起用来保证数据的唯一性。
- 企业开发中如何选择主键?
最少性: 尽量选择一个字段作为主键。
稳定性: 尽量选择更新少的字段作为主键。
尽量选择整数类型的字段作为主键。
结论: 搞一个id字段类型为int, 设置自动增长, 作为主键。
唯一键(unique)
- 作用
避免添加重复数据, 也就是说如果想保证某一个字段的值永远不重复, 那么就可以将这个字段设置为唯一键。
注意点:
唯一键不是主键, 主键有一个特点是不能重复, 但是唯一键不等于主键。
一张表中只能有一个主键, 但是一张表中可以有多个唯一键。
- 没有添加唯一键
create table if not exists stu1(
id int auto_increment primary key,
name varchar(20) <------ #可以添加重复数据
);
- 添加唯一键
1.添加唯一键的第一种方式
create table if not exists stu2(
id int auto_increment primary key,
name varchar(20) unique <------#建表时字段后面添加unique,name不可以添加重复数据
);
2.添加唯一键的第二种方式
create table if not exists stu(
id int auto_increment primary key,
name varchar(20),
unique key(name) <------#语句最后添加,name不可以添加重复数据
);
3.添加唯一键的第三种方式
create table if not exists stu(
id int auto_increment primary key,
name varchar(20)
);
alter table stu add unique(name); <------#建表完成指定唯一键
4.添加多个唯一键方式
create table if not exists stu11(
id int auto_increment primary key,
name varchar(20) unique,
score int unique
);
-------此时name和score都是唯一键。
- 删除唯一键
语法
alter table 表名 drop index 唯一键字段名;
示例
alter table stu11 drop index name;