SQL中主键的相关操作
PRIMARY KEY 关键字可以用来设置主键约束,PRIMARY KEY 关键字可以指定一列或者多列中的数据值具有唯一性,不存在相同的数据值。
在列上创建主键约束的语法格式如下:
column_name data_type PRIMARY KEY
定义数据表tb_emp2,其主键为id,SQL语句如下:
CREATE TABLE tb_emp2 ( id INT PRIMARY KEY, --定义id 为tb_emp2中的主键 name VARCHAR(25) NOT NULL, deptId CHAR(20) NOT NULL, salary FLOAT NOT NULL );
给主键加约束名称,SQL语句如下:
CREAT TABLE tb_emp3 ( id INT NOT NULL, name VARCHAR(25) NOT NULL, deptId CHAR(20) NOT NULL, salary FLOAT NOT NULL CONSTRAINT 员工编号 --给tb_emp3表中的id添加主键约束名称为:员工编号 PRIMARY KEY(id) );
在创建Table中,忘记给Table添加主键。后续添加主键的方法如下:
ALTER TABLE able_name ADD COUSTRAINT 约束名称 PRIMARY KEY [CLUSTERED | NONCLUSTERED] [列名] [, ...n]
实例:定义tb_emp4,创建完成后忘了给Table添加主键,现将id字段添加为主键
CREATE TABLE tb_emp4 ( id INT NOT NULL, name VARCHAR(15) NOT NULL, deptId CHAR(20) NOT NULL, salary FLOAT NOT NULL ); 执行下面这段SQL语句,就能给tb_emp4添加一个主键 GO ALTER tb_emp4 ADD CONSTRAINT 员工编号 PRIMARY KEY(id)
定义多字段联合主键(意思就是在一个Table中定义两个字段为主键) PRIMARY KEY
实例:在tb_emp5表中,假设没有主键id,为了确定一个员工,可以将name,deptId联合起来作为主键。SQL语句如下:
CREATE TABLE tb_emp5 ( name VARCHAR(15), deptId INT, salary FLOAT, CONSTRAINT 姓名部门约束 PRIMARY KEY(name,deptId) --将name跟deptId两个字段同时定义为主键 );
使用主键约束需注意的事项:
1、一个表只能包含一个PRIMARY KEY 约束
2、由PRIMARY KEY 约束生成的索引不会使表中的非聚集索引超过249个,聚集索引超过1个。
3、如果没有为PRIMARY KEY约束指定 CLUSTERED 或 NONCLUSTERED,并且没有为UNIQUE约束指定聚集索引,则将对该PRIMARY KEY约束使用 CLUSTERED。
4、在PRIMARY KEY约束中定义的所有列都必须定义为 not null 定义的约束也一样 不能为 not null
删除主键的方法使用DROP语句将其删除:
ALTER TABLE table_name DROP CONSTRAINT 约束名
删除tb_emp5表中定义的联合主键,SQL语句如下:
ALTER TABLE tb_emp5 DROP CONSTRAINT 姓名部门约束
注:执行完删除主键,可以在SSMS对象资源管理器中,查看tb_emp5表中的主键信息。