数据库中的主键、超建、候选键、外键是什么?

哈,听你这么一说感觉挺复杂的,我试着用我自己的话捋捋...
上周有个客户问我数据库这些键到底有啥区别,我跟他打了个比方。

主键就好比你身份证号,全国独一无二,谁谁谁身份证号不能重复,也不能是空的。
一张表只能有一个主键,这是规矩。
它的作用就是确保这一行的数据别跟其他行搞混了,还能保证数据完整,比如订单表用订单号当主键,你就知道每个订单都能查到。

候选键更像是“候选身份证号”,也是能唯一标识一行数据的字段组合,但它可以不止一个。
比如一张学生表,用学号能唯一标识,用身份证号也能唯一标识,这两个都是候选键。
但最后你得选一个当“正牌主键”,剩下的候选键可以变成普通字段(虽然理论上还是能唯一标识)。

超键就比较大了,它是个“全家桶”,只要能把一行数据唯一标识的任何字段组合都算超键。
比如学号是超键,那“学号+姓名”肯定也是超键,甚至“学号+学号+姓名”也是超键,反正只要能唯一标识就行。
超键包含了候选键和主键,但可能带“冗余”信息,比如用“学号+姓名”当超键,其实“学号”就够用了,多加个“姓名”就没必要。

外键是跨表的关系链,像“表A里的某个字段是表B的主键,那这个字段在表A就叫外键”。
比如订单表里的“客户ID”是客户表的主键,那订单表里的“客户ID”就是外键。
它的作用就是保证数据关联的完整性,比如不能在订单表里随便写个不存在的客户ID。
你删客户表里的人,得先确认订单表里没关联他的订单,不然就报错,这就是外键约束。

你看这么解释是不是清晰点?其实超键和候选键挺像的,候选键是“最小化”的超键,去掉任何一个字段就不能唯一标识了。
主键就是被选出来的那个“最常用”的候选键。
外键是表跟表之间的“约束关系”,防止数据乱来。

但说到底,具体用哪个得看情况。
有时候为了查询方便或者性能考虑,可能选不那么“最小”的主键。
比如订单号可能很长,但有时候会用订单ID的hash值当主键,虽然不是最小候选键但能加快查询。

反正这些概念挺绕的,但核心就几条:
主键唯一非空,一个表一个
候选键能唯一标识,但主键是选出来的最优那个
超键能唯一标识,但可能带多余字段
外键是表间约束,保证关联数据一致
具体选哪个、怎么用,得结合业务场景来,不是死规定。
我之前做项目踩坑就是,为了关联快用了hash值当主键,结果后来数据量大了查询效率反而低,最后还是改回原始ID。
所以这些理论学明白,实际用还得灵活变通。

sql外键语句怎么写

外键就是表与表之间的桥梁,保证数据不乱跑。
简单说,就是:
1 . 添加外键:ALTER TABLE 子表名 ADD FOREIGN KEY(子表外键列) REFERENCES 父表名(父表主键列); 2 . 级联删除:ON DELETE CASCADE; 3 . 更新设为NULL:ON UPDATE SET NULL; 4 . 直接定义外键:CREATE TABLE 时一起定义; 5 . 注意:主键、数据类型要匹配,外键值要在父表主键里。

用外键,数据就不会乱,操作要小心,不同数据库有差异。

菜鸟学数据库(四)——超键、候选键、主键、外键

超键:能唯一标识元组的属性集,如学号。
候选键:不包含多余属性的超键,如学号或身份证号。
主键:选定的候选键,如学生表中的学号。
外键:指向另一表主键的属性,如学生表中的教师编号。