MySQL Primary Key

摘要:在本教程中,您将学习如何使用MySQL 主键约束来为表创建主键。

MySQL主键简介

主键是唯一标识表中每一行的一列或一组列。主键遵循以下规则:

  • 主键必须包含唯一值。如果主键由多列组成,则这些列中的值的组合必须是唯一的。
  • 主键列不能有NULL值。任何向主键列插入更新NULL的尝试都会导致错误。请注意,MySQL 隐式向主键列添加NOT NULL约束。
  • 一张表只能有一个主键。
mysql primary key

因为 MySQL 使用整数的速度更快,所以主键列的数据类型应该是整数,例如INT , BIGINT 。并且您应该确保主键的整数类型的值范围足以存储表可能具有的所有可能的行。

主键列通常具有AUTO_INCREMENT属性,每当您向表中插入新行时,该属性都会自动生成顺序整数。

当您为表定义主键时,MySQL 会自动创建一个名为PRIMARY索引

MySQL PRIMARY KEY示例

PRIMARY KEY约束允许您在创建或更改表时定义表的主键。

1)在CREATE TABLE中定义PRIMARY KEY约束

通常,您在CREATE TABLE语句中定义表的主键。

如果主键只有一列,则可以使用PRIMARY KEY约束作为列约束:

CREATE TABLE table_name(
    primary_key_column datatype PRIMARY KEY,
    ...
);Code language: SQL (Structured Query Language) (sql)

当主键有多于一列时,必须使用PRIMARY KEY约束作为表约束。

CREATE TABLE table_name(
    primary_key_column1 datatype,
    primary_key_column2 datatype,
    ...,
    PRIMARY KEY(column_list)
);Code language: SQL (Structured Query Language) (sql)

在此语法中,您可以使用逗号 (,) 分隔column_list中的列。

当主键只有一列时,可以使用PRIMARY KEY表约束:

CREATE TABLE table_name ( 
    primary_key_column datatype, 
    ... ,
    PRIMARY KEY(primary_key_column)
);Code language: SQL (Structured Query Language) (sql)

以下示例创建一个名为users,其主键是user_id列:

CREATE TABLE users(
   user_id INT AUTO_INCREMENT PRIMARY KEY,
   username VARCHAR(40),
   password VARCHAR(255),
   email VARCHAR(255)
);Code language: SQL (Structured Query Language) (sql)

此语句创建具有PRIMARY KEY约束作为表约束的roles表:

CREATE TABLE roles(
   role_id INT AUTO_INCREMENT,
   role_name VARCHAR(50),
   PRIMARY KEY(role_id)
);Code language: SQL (Structured Query Language) (sql)

如果主键由多列组成,则必须在CREATE TABLE语句的末尾指定它们。您将逗号分隔的主键列列表放在PRIMARY KEY关键字后面的括号内。

以下示例创建user_roles表,其主键由两列组成: user_idrole_id 。它将PRIMARY KEY约束定义为表约束:

CREATE TABLE user_roles(
   user_id INT,
   role_id INT,
   PRIMARY KEY(user_id,role_id),
   FOREIGN KEY(user_id) 
       REFERENCES users(user_id),
   FOREIGN KEY(role_id) 
       REFERENCES roles(role_id)
);Code language: SQL (Structured Query Language) (sql)

请注意,该语句还创建了两个外键约束。

2)使用ALTER TABLE定义PRIMARY KEY约束

如果某个表由于某种原因没有主键,可以使用ALTER TABLE语句向表添加主键,如下所示:

ALTER TABLE table_name
ADD PRIMARY KEY(column_list);Code language: SQL (Structured Query Language) (sql)

以下示例将id列添加到主键。

首先,创建没有主键的pkdemos表。

CREATE TABLE pkdemos(
   id INT,
   title VARCHAR(255) NOT NULL
);Code language: SQL (Structured Query Language) (sql)

其次,使用ALTER TABLE语句向pkdemos表添加主键:

ALTER TABLE pkdemos
ADD PRIMARY KEY(id);Code language: SQL (Structured Query Language) (sql)

如果你给已经有数据的表添加主键。将包含在主键中的列中的数据必须是唯一的且不为 NULL。

PRIMARY KEYUNIQUE KEYKEY

KEYINDEX的同义词。当您想要为不属于主键或唯一键的列或一组列创建索引时,可以使用KEY

UNIQUE索引确保列中的值必须是唯一的。与PRIMARY索引不同,MySQL 允许在UNIQUE索引中使用NULL值。另外,一个表可以有多个UNIQUE索引。

假设users表中用户的emailusername必须是唯一的。要强制执行这些规则,您可以为emailusername名列定义UNIQUE索引,如下所示:

username名列添加UNIQUE索引:

ALTER TABLE users
ADD UNIQUE INDEX username_unique (username ASC) ;Code language: SQL (Structured Query Language) (sql)

email列添加UNIQUE索引:

ALTER TABLE users
ADD UNIQUE INDEX  email_unique (email ASC) ;Code language: SQL (Structured Query Language) (sql)

在本教程中,您学习了如何为新表创建主键或向现有表添加主键。

本教程有帮助吗?