SQL主键的完整教程

173 阅读4分钟

SQL 主键是表中的一个字段,它能唯一地识别表中的某一行。如果该列有一个主键约束,那么它将包含唯一的值,并且不能包含任何NULL值。

一个主键的长度不能超过900字节。

sql主键

SQL主键(PRIMARY KEY)约束能够唯一地识别表中的每一条记录。主键必须包含UNIQUE值,不能包含NULL值。表只能有一个主键;而且在表中,该主键可以由单个或多个列(字段)组成。

一个表将只包含一个主键,它可以由单个或多个字段组成,当多个字段被用作主键时,它被称为复合键。

如果表在任何字段中定义了一个主键,它就不能有两个或更多具有相同值的记录。

SQL复合键

当多个字段被用作主键时,它们被称为复合键。

主键的关键点

  1. 主键执行了表的实体完整性。
  2. 主键总是有唯一的数据。
  3. 主键的长度不能超过900字节。
  4. 主键不能有一个空值。
  5. 主键不能有重复的值。
  6. 表只能包含一个主键约束。

如果一个表在任何字段上定义了主键,那么你不能让两条记录在该字段上有相同的值。创建主键的方法有以下几种:

  1. 使用创建语句
  2. 使用改变语句。

使用CREATE TABLE创建主键

请看下面的语法。

在列的名称后面添加主键

Create table table_name
( 
column1 datatype [NULL|NOT NULL], [PRIMARY KEY],
column2 datatype [NULL|NOT NULL], [PRIMARY KEY],
…………………….
Column(n) datatype [NULL|NOT NULL]);

使用约束条件名称

CREATE TABLE table_name
(
Column1 datatype [NULL|NOT NULL],
Column2 datatype [NULL|NOT NULL],
………….
CONSTRAINT constraint_name PRIMARY KEY (column1, column2, …., column(n));

注意

[NULL|NOT NULL]是可选的。如果你没有提到这些,那么默认情况下,一个列可以接受NULL值。

让我们用一个例子来说明一下语法问题

Create table employees
(emp_id integer, name varchar(40), salary integer);

现在,在执行这个命令后,将创建一个以emp_id为主键的表employees。创建完表后,写道:

Desc employees;

你可以看到 emp_id 键字段将有一个称为 PRI 的 文本 被称为PRIMARY KEY。请看下面的输出:

SQL PRIMARY KEY Tutorial

现在,请看下面的查询:

create table employees
(emp_id integer, name varchar(40), salary integer, 
CONSTRAINT employees_id 
PRIMARY KEY(emp_id));

现在,在执行这个命令后,将创建一个以emp _id为主键的名为employees的表。

在创建完表后,写下下面的查询

Desc employees;

你可以看到 emp_id 键字段将有一个称为 PRI 的 文本 被称为PRIMARY KEY。请看下面的输出:

Using Constraint names

让我们来创建一个复合键,即一个主键有多于一个列。请看下面的查询:

create table employees
(emp_id integer, name varchar(40), salary integer, 
CONSTRAINT employees_id PRIMARY KEY(name, salary));

现在,执行这个命令后,将创建一个名为employees的表,其 主键为姓名和工资

创建完表后,写下以下查询:

Desc employees;

你可以看到, 姓名和工资 键字段将有一个称为 PRI 的 文本 被称为主键。 请看下面的输出:

SQL PRIMARY KEY Example

使用Alter语句创建PRIMARY KEY

请看下面的语法:

Alter table table_name ADD primary key(column name);

请看下面的查询:

Alter table employees add primary key(emp_id);

请看下面的输出:

Create PRIMARY KEY Using Alter Statement

解释

你可以看到,在创建表的时候,我们没有提到任何列作为主键。因此,为了使某一列成为唯一的,我们使用了一个改变语句

使用alter语句创建COMPOSITE KEY

请看下面的语法:

Alter table table_name 
ADD constraint 
constraint_name primary key(column(s));

请看下面的查询:

alter table employees 
add constraint employees_pri Primary key(Name, salary);

请看输出:

Create COMPOSITE KEY Using Alter Statement

解释

你可以看到,在创建表的时候,我们没有提到任何列作为主键。因此,为了使某一(些)列成为唯一的,我们使用了一个更改的语句。

删除一个主键

请看下面的语法:

Alter table table_name 
DROP primary key;

让我们 用上面提到的主键来创建表employees 。然后我们将删除它。

请看查询:

Alter table employees drop primary key;

请看下面的输出:

DELETE A PRIMARY KEY 禁用主键

你可以使用SQL Server中的ALTER TABLE语句禁用主键(Transact-SQL)。

下面是在SQL Server(Transact-SQL)中使用ALTER INDEX语句禁用主键的语法:

ALTER INDEX constraint_name ON table_name
DISABLE;

让我们使用SQL Server (Transact-SQL)中的ALTER INDEX语句来禁用一个主键。

比如说:

ALTER INDEX employees_pk ON employees
DISABLE;

#启用主键

你可以使用SQL Server (Transact-SQL)中的ALTER INDEX语句来启用主键。请看下面的语法:

ALTER INDEX constraint_name ON table_name
REBUILD;

让我们来看看在SQL Server中使用ALTER INDEX语句启用主键:

ALTER INDEX employees_pk ON employees
REBUILD;

本教程就到此为止。