一个表只能有一个主键约束,且主键约束不能取空值
通过unique约束定义唯一性,为了保证一个表非主键列不输入重复值,可在该列定义unique约束。 

primary key约束与unique约束主要区别如下。 
(1)一个表只能创建一个primary key约束,但可创建多个unique约束。
(2)primary key约束的列值不允许为空值,unique约束的列值取空值。
(3)创建primary key约束时,系统会自动产生primary key索引。创建unique约束时,系统会自动产生unique索引。 

primary key约束与unique约束都不允许对应列存在重复值。 

5.1.1 主键约束

MySQL的主键列必须遵守以下规则

(1)每个表只能定义一个主键。 
(2)表中的两条记录在主键上不能具有相同的值,即遵守“唯一性规则”
(3)如果从一个复合主键中删除一列后,剩下的列构成的主键仍然满足唯一性原则,那么,这个复合主键是不正确的,这就是“最小化规则”。 
(4)一个列名在复合主键的列表中只能出现一次。 

1.在创建表时创建主键约束

【例8.1】在数据库study中创建"课程1"表,以列级完整性约束方式定义主键。 

create table 课程1(
	课程号 char(4) not null primary key,
	课程名 char(16) not null,
	学分 tinyint null);

【例8.2】在数据库stusys中创建course2表,以表级完整性约束方式定义主键。 

create table 课程2(
    课程号 char(4) not null, 
	课程名 char(16) not null, 
	学分 tinyint null,  
	primary key(课程号)); 

【例8.3】在数据库stusys中创建course3表,以表级完整性约束方式定义主键,并指定主键约束名称。 

create table 课程3(
	课程号 char(4) not null primary key,
	课程名 char(16) not null,
	学分 tinyint null,
	constraint pk_课程3 primary key(课程号));

2.删除主键约束

 语法格式:

alter table<表名> drop primary key; 

【例8.4】删除例8.3创建的在course3表上的主键约束。 

alter table 课程3
	drop primary key;

3.在修改表时创建主键约束

语法格式: 

alter table<表名> 
add ( [ constraint T < 约束名 > ] primary key ( 主键列名 ) 

【例8.5】重新在course3表上定义主键约束。 

alter table 课程3
	add constraint pk_课程3 primary key(课程号);

5.1.2唯一性约束

唯一性约束的值必须是唯一的,不允许重复。一个表可创建多个唯一性约束。 

1.在创建表时创建唯一性约束

【例8.6】在数据库stusys中创建course4表,以列级完整性约束方式定义唯一性约束。 

create table 课程4(
    课程号 char(4) not null, 
	课程名 char(16) not null unique, 
	学分 tinyint null);  


在课程名列定义的后面加上unique关键字,列级定义唯一性约束,未指定约束名字,MysQL自动创建约束名字。 

【例8.7】在数据库stusys中创建course5表,以表级完整性约束方式定义唯一性约束。 

create table 课程5(
    课程号 char(4) not null, 
	课程名 char(16) not null unique, 
	学分 tinyint null,
	constraint uk_课程5 unique(课程名)); 

 

在表中所有列定义的后面加上一条constraint子句,表级定义唯一性约束,指定约束名字为uk_课程5。 

2.删除唯一性约束

语法格式: 

alter table<表名>drop index<约束名>; 

【例8.8】删除例8.7在course5表创建的唯一性约束。 

alter table 课程5
	drop index uk_课程5;

3.在修改表时创建唯一性约束

语法格式: 

alter table<表名> 
add ( [ constraint < 约束名 > ] unique ( 唯一性约束列名 ) 

【例8.9】重新在course5表上定义唯一性约束。 

alter table 课程5
	add constraint uk_课程5 primary key(课程名);

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部