关键码(Key,简称键)在数据结构中,指的是数据元素中能起标识作用的数据项。
在数据库中,关键码由一个或多个属性组成。在实际使用中,有下列几种键:
主键(Primary Key)
数据库主键,指的是一个列或多个列的集合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。一般不佳说明,键是指主键。
当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列(自增列)。
主键作用:
1)保证实体的完整性,实体完整性要求每个表中的主键字段都不能为空或者重复的值。
2)加快数据库的操作速度
3) 在表中添加新记录时,DBMS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
4) DBMS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。
主键分类:
单主键:一个字段就能作为主键
复合主键(联合主键):用两个或两个以上的字段作为主键
举例:学生成绩(学号,课程号,成绩)
因为学号和课程号才能决定成绩,想要确定成绩,必须要知道学号和课程号,缺一不可,因此,学号和课程号就成为了复合主键。
主键的选择:
①编号作主键
个人理解:就是自己手动输入编号并作为主键
②自动编号主键
这种方法小编才用过,就是将数据库的主键设置为自增长。
优点:数据库自动编号,速度快;
增量增长,检索非常方便;
数字型,占用空间小,易排序。
缺点:手动插入编号比较麻烦,需要考虑主键冲突的问题;
如果其他表导入,但是主键类型不是数字型,还要修改主键数据类型;
就算导入的也是数字型的,但是为了区分新老数据,可能要在老数据前统一加一个"O"(old)来表示老数据,那么 ,这又是比较麻烦的一件事。
删除一条数据之后,数据库中主键编号就不是连续的了(小编认为这也是自动编号主键的一个缺点,但是今天小编了解到一个假删除的手段,可以解决这个问题,在数据库表里面添加一个新的字段is_delete,如果为0表示数据可用,如果为1表示数据已经删除;如果想要删除一条数据的话,不用delete的SQL语句,直接把is_delete字段值更新为1就行了。这样,对于用户来说,这一条记录是删除了,但是对于设计者来说,这条记录依旧存在。这就解决了为主键编号删除后不连续的问题了。为什么要用假删除呢,第一,误操作的时候可以很快找到该条数据;其次,可以作为历史纪录进行后期处理,做大数据分析。举例:就像淘宝,有些东西,我们加入了购物车,但是过了一段时间之后,我们把它删除了,但是在猜你喜欢的列表里,依旧会有这一类的东西。这就体现了虽然用户进行了删除,但是数据库中,这条数据依然存在,进行大数据分析时,会统计到这条数据,并向用户推荐)
③Max加一
④自制加一
⑤GUID主键
③④⑤三种方式小编也没有用过,给大家提供一个百度百科的链接
数据库主键_百度百科
https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%BB%E9%94%AE/128038?fr=aladdin
如果大家使用过这三种方法或有一定了解的,可以多多指点哦!
超键(Super Key)
在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。
举例:在一个学生表中,假设有"学号""姓名""性别"等字段,其中学号是唯一的,那么(学号)是一个超键;(学号,姓名,生日)的组合也是唯一的,所以也可以作为一个超键。只要是根据这些属性能唯一能确定一名学生的,就是超键。
候选键(Candidate Key)
如果一个属性集能唯一标识元组,且不包含多余属性,那么这个属性集称为候选键。也就是在候选键中,若要再删除属性就不是键了。
主键与候选键的关系:主键是用户选能唯一标识元组的一个候选键。
超键与候选键的关系:不含有多余属性的超键称为候选键。
外键(Foreign Key)
如果一个关键字在一个关系中是主键,那么它在另外一个含有该主键的关系中称为外键。
主键、超键、候选键三者之间的包含关系:
文章如有不足之处,欢迎大家在评论中多提建议。