MySQL 复合主键(Day02)

主键约束

主键约束是表中的某一列,也可以是表中多个列所构成的一个组合,其中有多一个列组合而成的主键称为复合主键

在MsSQL中,主键列必须遵循以下规则:

1.每个表只能定义一个主键

2.唯一性原则,主键的值也成只为键值,必须能够唯一标识表中的每一条记录,且不能为NULL,也就是说一张表中两个不同的行

在主键上不能有相同的值。

3.最小化规则.复合主键不能包含不必要的多余列,也就是说,当从一个复合主键中删除一列后,如果剩下的列构成的主键仍能够满足唯一性原则,那么这个复合主键是不正确的。

4.一个列明在符合主键中只能出现一次。

 

有多一个列组合而成的主键称为复合主键

复合主键

什么是主键约束:(在一个数据表中通过多个字段作为主键来确定一条记录,那么,多个字段组成的就是复合主键 )

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

(下文摘选自-作者:beautifulsarah ,应博主要求,转载请注明出处
来源:CSDN 
原文:https://blog.csdn.net/beautifulsarah/article/details/53502109?utm_source=copy )

所谓的复合主键 就是指你表的主键含有一个以上的字段组成 
比如 
create table test 

   name varchar(19), 
   id number, 
   value varchar(10), 
   primary key (name,id) 
)

上面的name和id字段组合起来就是你test表的复合主键 
它的出现是因为你的name字段可能会出现重名,所以要加上ID字段这样就可以保证你记录的唯一性 
一般情况下,主键的字段长度和字段数目要越少越好
--------------------- 

为什么要使用主键约束:

(以下内容摘选自-作者:南极娃娃鱼 )应博主要求,转载请注明出处

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
来源:CSDN 
原文:https://blog.csdn.net/wangyuchun_799/article/details/49329649?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

最近学习一点数据库的基本知识,被一个问题困惑了许久:主键是唯一的索引,那么为何一个表可以创建多个主键呢?

其实“主键是唯一的索引”这话有点歧义的。举个例子,我们在表中创建了一个ID字段,自动增长,并设为主键,这个是没有问题的,因为“主键是唯一的索引”,ID自动增长保证了唯一性,所以可以。

此时,我们再创建一个字段name,类型为varchar,也设置为主键,你会发现,在表的多行中你是可以填写相同的name值的,这岂不是有违“主键是唯一的索引”这句话么?

所以我才说“主键是唯一的索引”是有歧义的。应该是“当表中只有一个主键时,它是唯一的索引;当表中有多个主键时,称为复合主键,复合主键联合保证唯一索引”。

为什么自增长ID已经可以作为唯一标识的主键,为啥还需要复合主键呢。因为,并不是所有的表都要有ID这个字段啊哈哈,比如,我们建一个学生表,没有唯一能标识学生的ID,怎么办呢,学生的名字、年龄、班级都可能重复,无法使用单个字段来唯一标识,这时,我们可以将多个字段设置为主键,形成复合主键,这多个字段联合标识唯一性,其中,某几个主键字段值出现重复是没有问题的,只要不是有多条记录的所有主键值完全一样,就不算重复。
--------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------

创建主键约束有两种方法:

1.create table tb_user(

id int auto_increment primary key,

user varchar (30)  not null,

createtime daretime);

方法二:

create table tb_student(

id int auto_increment,

name varchar(30) not null,

sex varchar(2),

classid int not null,

birthday date,

PRIMARY KEY(id,classid)

);

如果表中仅由表中的某一列所构成,那么以上两种方法均可定义主键约束,如果主键有表中多个列所构成,那么只能用第二种方法来定义主键约束,另外,定义主键约束后,MySQL会自动为主键创建一个唯一索引,默认名为primary,也可以修改其他的名字。

你可能感兴趣的:(Mysql数据库)