主键约束
主键约束是表中的某一列,也可以是表中多个列所构成的一个组合,其中有多一个列组合而成的主键称为复合主键
在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,也可以修改其他的名字。