SQL 主键是表中的一个字段,它能唯一地识别表中的某一行。如果该列有一个主键约束,那么它将包含唯一的值,并且不能包含任何NULL值。
一个主键的长度不能超过900字节。
sql主键
SQL主键(PRIMARY KEY)约束能够唯一地识别表中的每一条记录。主键必须包含UNIQUE值,不能包含NULL值。表只能有一个主键;而且在表中,该主键可以由单个或多个列(字段)组成。
一个表将只包含一个主键,它可以由单个或多个字段组成,当多个字段被用作主键时,它被称为复合键。
如果表在任何字段中定义了一个主键,它就不能有两个或更多具有相同值的记录。
SQL复合键
当多个字段被用作主键时,它们被称为复合键。
主键的关键点
- 主键执行了表的实体完整性。
- 主键总是有唯一的数据。
- 主键的长度不能超过900字节。
- 主键不能有一个空值。
- 主键不能有重复的值。
- 表只能包含一个主键约束。
如果一个表在任何字段上定义了主键,那么你不能让两条记录在该字段上有相同的值。创建主键的方法有以下几种:
- 使用创建语句。
- 使用改变语句。
使用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。请看下面的输出:
现在,请看下面的查询:
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。请看下面的输出:
让我们来创建一个复合键,即一个主键有多于一个列。请看下面的查询:
create table employees
(emp_id integer, name varchar(40), salary integer,
CONSTRAINT employees_id PRIMARY KEY(name, salary));
现在,执行这个命令后,将创建一个名为employees的表,其 主键为姓名和工资 。
创建完表后,写下以下查询:
Desc employees;
你可以看到, 姓名和工资 键字段将有一个称为 PRI 的 文本 , 被称为主键。 请看下面的输出:

使用Alter语句创建PRIMARY KEY
请看下面的语法:
Alter table table_name ADD primary key(column name);
请看下面的查询:
Alter table employees add primary key(emp_id);
请看下面的输出:

解释
你可以看到,在创建表的时候,我们没有提到任何列作为主键。因此,为了使某一列成为唯一的,我们使用了一个改变语句。
使用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);
请看输出:

解释
你可以看到,在创建表的时候,我们没有提到任何列作为主键。因此,为了使某一(些)列成为唯一的,我们使用了一个更改的语句。
删除一个主键
请看下面的语法:
Alter table table_name
DROP primary key;
让我们 用上面提到的主键来创建表employees 。然后我们将删除它。
请看查询:
Alter table employees drop 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;
本教程就到此为止。

