SQL表的主键-表

建立一个新的学生信息表,即表Student2:

Sno

Sname

Ssex

Sage

Sdept

S01

王建平

21

自动化

S02

刘华

19

电子

S03

范林军

18

电子

S04

李伟

19

计算机

S05

赵健

18

数学

S06

黄玲

20

数学

S07

李伟

18

数学

                                        表2.  Student2

    表Student2与表Student不同的是,出现了两位叫李伟的同学,分别来自计算机系和数学系。这样一来,Sname这个字段就不能唯一地标识表中的一条记录。虽然两人都叫李伟,但是两人的学号Sno不同,字段Sno仍然能唯一标识每条记录,该字段就可以作为表Student2的主键。

主键的定义:数据表中的一条记录有若干个字段,若其中某个字段组(注意是组)能唯一标识一条记录,该字段组就可以成为一个主键。主键的选择是由任意性的,凡是满足上述条件的都可以被选作主键,但是在一个表中最多只能有一个主键。

    比如:

    表Student2(Sno,Sname,Ssex,Sage,Sdept)

    其中每个学生的学号Sno是唯一的,Sno就可以是一个主键;

    课程表(课程编号,课程名,学分)

    其中课程编号是唯一的,课程编号就可以是一个主键;

    成绩表(学号,课程号,成绩)

    成绩表中单一一个字段无法唯一标识一条记录,因为存在着多个学生选一门课和一个学生选多门课的情况。因此学号和课程号的组合才可以唯一标识一条记录,所以说学号和课程号的字段组可以是一个主键。

主键的意义:主要在于维护数据的完整性。由于主键能唯一标识一条记录,在数据的录入和管理过程中就不会因为字段值的重复而导致某些记录的数据丢失(例如重名的情况下只录入了一个人的数据)。此外,合理地设置主键可以使数据表条理清楚,加快数据库的操作速度。

    正是因为主键有这样的作用,建立主键时应该遵循一定的原则:

    1.       主键的值不可重复,也不可为空(NULL);

    2.       一个表中只能有一个主键。

    虽然将由若干个字段组成的字段组作为主键也是允许的,即所谓的复合主键。但是实际应用中往往需要使用单一主键,即用单一的字段来标识每条记录。当使用SQL语句对表内数据进行查询更新等操作时,可以看出,使用复合主键时SQL语句更复杂。仍以表Student2为例,假设学号为S05的赵健同学从数学系转到计算机系,需要更新表中的数据。

    如果采用字段组Sname、Ssex和Sage作复合主键,SQL语句如下:

UPDATE  Student2  set  Sdept=”计算机”  WHERE Sname=”赵健” AND Ssex=”男” AND Sage=”18”;

    如果采用字段Sno作单一主键,SQL语句如下:

UPDATE  Student2  set  Sdept=”计算机”  WHERE  Sno=”S05”;

    上述语句作用相同,显然使用复合主键SQL语句更加复杂,而这种复杂度完全可以通过使用单一主键来避免。

    另外,当操作涉及多个相互关联的表时,采用复合主键SQL语句将会更加复杂,而且表间关系也会更混乱,学过下一节表关联,相信大家对这一点会有更深的体会。有兴趣的读者可以在学过表关联之后尝试一下采用复合主键的表关联。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值