概念

唯一键(unique)

  • 不能重复
  • 一个表中可以有多个

主键(primary key)

  • 不能重复、不能为空(会自动加上 NOT NULL 属性)
  • 用于区分表中的每一条数据,方便让外键来引用,且一个表中只能有一个

要点提示

  • MySQL 的术语里面『键』就等于『索引』,这就是为什么你在看唯一键的创建语句时跟你实际创建的语句可能不一样
  • 主键 = NOT NULL + 唯一键
  • 主键和唯一键都可以建立在某一个字段或某几个字段上(几个字段共同组成主键/唯一键,下面会讲)
  • 自增长(AUTO_INCREMENT)属性必须定义在主键上

使用

创建

建表前

  • 直接在字段后加上 PRIMARY KEY / UNIQUE (注意没有 KEY

    1
    2
    3
    4
    5
    create table stu4(
    id1 int primary key,<------#直接指定主键字段
    id2 int,
    name varchar(20)
    );
    1
    2
    3
    4
    create table if not exists stu2(
    id int auto_increment primary key,
    name varchar(20) unique <------#建表时字段后⾯添加unique,name不可以添加重复数据
    );
  • 在所有字段之后增加 PRIMARY KEY (字段或字段列表) / UNIQUE KEY (字段或字段列表)

    1
    2
    3
    4
    5
    6
    create table stu5(
    id1 int,
    id2 int,
    name varchar(20),
    primary key(id1)<------#语句最后指定主键字段
    );
    1
    2
    3
    4
    5
    create table if not exists stu(
    id int auto_increment primary key,
    name varchar(20),
    unique key(name)<------#语句最后添加,name不可以添加重复数据
    );
    联合主键 / 唯一键

    正如上文所述,可以使用几个字段共同组成主键/唯一键

    1
    2
    3
    4
    5
    6
    create table stu7(
    id1 int,
    id2 int,
    name varchar(20),
    primary key(id1,id2)<------#主键由两个字段组成
    );
    1
    2
    3
    4
    5
    6
    create table stu7(
    id1 int,
    id2 int,
    name varchar(20),
    unique key(id1,id2)<------#唯一键由两个字段组成,不等同于分别将两个字段加上 UNIQUE 属性
    );

    总结:将字段改为字段列表就可以了,建表后也可创建

建表后

1
alter table stu6 add primary key(id1);<------#表创建完成后添加主键
1
alter table stu add unique(name);<------#建表完成指定唯⼀键
1
create unique index UserNameIndex on 't_user' ('username');

删除

主键

1
alter table 表名 drop primary key;

唯一键(用删除索引的方法删除)

1
2
3
4
5
6
语法
alter table 表名 drop index 唯⼀键字段名;
⽰例
alter table stu11 drop index name;
错误示例
alter table stu11 drop unique key name;//错误的

修改

没法直接修改,只能先删除再添加

或者创一个新表,把结构建好,然后把数据搬过去

查看

  • 查看表结构 desc 表名;

  • 查看表的创建语句 show create table 表名;