作用

用来唯一标识表中的一行记录。

关键字

primary key

特点

  • 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。

image.png

  • 一个表最多只能有一个主键约束,建立主键约束可以在列级别创建,也可以在表级别上创建。
  • 主键约束对应着表中的一列或者多列(复合主键)
  • 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
  • MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用。
  • 当创建主键约束时,系统默认会在所在的列或列组合上建立对应的主键索引(能够根据主键查询的,就根据主键查询,效率更高)。如果删除主键约束了,主键约束对应的索引就自动删除了。
  • 需要注意的一点是,不要修改主键字段的值。因为主键是数据记录的唯一标识,如果修改了主键的值,就有可能会破坏数据的完整性。

    添加主键约束

    在创建表时添加主键约束

    基本语法

    1. create table 表名称(
    2. 字段名 数据类型 primary key, #列级模式
    3. 字段名 数据类型,
    4. 字段名 数据类型
    5. );
    6. create table 表名称(
    7. 字段名 数据类型,
    8. 字段名 数据类型,
    9. 字段名 数据类型,
    10. [constraint 约束名] primary key(字段名) #表级模式
    11. );

    例子

    ```sql

    一个表中最多只能有一个主键约束。

    错误:Multiple primary key defined

    CREATE TABLE test3( id INT PRIMARY KEY, #列级约束 last_name VARCHAR(15) PRIMARY KEY, salary DECIMAL(10,2), email VARCHAR(25) );

主键约束特征:非空且唯一,用于唯一的标识表中的一条记录。

CREATE TABLE test4( id INT PRIMARY KEY, #列级约束 last_name VARCHAR(15), salary DECIMAL(10,2), email VARCHAR(25) );

MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用。

CREATE TABLE test5( id INT , last_name VARCHAR(15), salary DECIMAL(10,2), email VARCHAR(25),

表级约束

CONSTRAINT pk_test5_id PRIMARY KEY(id) #没有必要起名字。 );

SELECT * FROM information_schema.table_constraints WHERE table_name = ‘test5’;

INSERT INTO test4(id,last_name,salary,email) VALUES(1,’Tom’,4500,’tom@126.com’);

错误:Duplicate entry ‘1’ for key ‘PRIMARY’

INSERT INTO test4(id,last_name,salary,email) VALUES(1,’Tom’,4500,’tom@126.com’);

错误:Column ‘id’ cannot be null

INSERT INTO test4(id,last_name,salary,email) VALUES(NULL,’Tom’,4500,’tom@126.com’);

SELECT * FROM test4;

  1. <a name="lxzH9"></a>
  2. ## 建表后添加主键约束
  3. <a name="mGJpX"></a>
  4. ### 基本语法
  5. ```sql
  6. #字段列表可以是一个字段,也可以是多个字段,如果是多个字段的话,是复合主键
  7. ALTER TABLE 表名称 ADD PRIMARY KEY(字段列表);

例子

  1. # 在ALTER TABLE时添加约束
  2. CREATE TABLE test6(
  3. id INT ,
  4. last_name VARCHAR(15),
  5. salary DECIMAL(10,2),
  6. email VARCHAR(25)
  7. );
  8. DESC test6;
  9. ALTER TABLE test6
  10. ADD PRIMARY KEY (id);

复合主键约束

基本语法

  1. create table 表名称(
  2. 字段名 数据类型,
  3. 字段名 数据类型,
  4. 字段名 数据类型,
  5. primary key(字段名1,字段名2) #表示字段1和字段2的组合是唯一的,也可以有更多个字段
  6. );

例子

  1. CREATE TABLE user1(
  2. id INT,
  3. NAME VARCHAR(15),
  4. PASSWORD VARCHAR(25),
  5. PRIMARY KEY (NAME,PASSWORD)
  6. );
  7. #如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
  8. INSERT INTO user1
  9. VALUES(1,'Tom','abc');
  10. INSERT INTO user1
  11. VALUES(1,'Tom1','abc');
  12. #错误:Column 'name' cannot be null
  13. INSERT INTO user1
  14. VALUES(1,NULL,'abc');
  15. SELECT * FROM user1;

删除主键约束

基本语法

注意:在实际开发中,不会去删除表中的主键约束!

  1. alter table 表名称 drop primary key;

例子

  1. ALTER TABLE test6
  2. DROP PRIMARY KEY;