主键、唯一键、外键

1.主键

主键用来区分数据,联系各个表,不能为空且在表中数据是唯一的

create table t_8(
    id int(20) primary key,	// 定义主键
    name varchar(30)
    );

 可以添加组合键(复合主键),但扩展性不行,一张表里可以有多个组合键,但是可能在非特殊的情况下实际的意义不大,添加复合主键要先把原主键删除

alter table tablename add primary key (字段,字段...);	// 添加复合主键

2.唯一键

唯一键限定范围是在一张表中,它不会用作来关联其他的数据,它也可以为空,在这张表中一定是唯一的,用来保证在这个表中这个数据不重复。

// 添加唯一键,两种方法,
create table t(
    id int primary key,
    phone varchar(20) unique	// 唯一键
    );
    
alter table tablename add unique (字段,字段...);

主键与唯一键的区别

3.外键 

外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束(简单来说外键是另一个表的主键或者唯一约束)。外键可以有重复的, 可以是空值,用来建立和加强两个表数据之间的连接

主外键的关系:

左边信息表为主表,右边成绩表为从表

1.当主表中没有对应的记录时,不能将记录添加到子表(学生成绩表中不能出现学生信息表中没有的学号)

2.不能更改主表中的值而导致子表中的记录孤立(学生信息表中的id变化了,学生成绩表中的id也要随着发生改变)

3.子表存在与主表对应的记录,不能从主表中删除该行(不能把部门表中的数据删除)

4.删除主表前,先删子表

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:主键数据库表中用于唯一标识每一行数据的字段或字段组合。主键作用是确保数据的唯一性和完整性。主键可以由一个或多个字段组成,这取决于表的设计和需求。主键的值在整个表中必须是唯一的,且不能为空。外键是一个表中的字段,它引用了另一个表中的主键,用于建立表与表之间的关系。外键可以用来确保数据的一致性和完整性,它可以用来连接两个表并建立关联。引用\[2\]:复合和复合的区别在于,复合的任何部分都可以是外键,但复合可能是或可能不是外键的一部分。引用\[3\]:复合主键是指由多个字段组成的主键。然而,使用复合主键的人通常有两个理由为自己开脱,而这两个理由都是错误的。其一是主键应当具有实际意义,然而,让主键具有意义只不过是给人为地破坏数据库提供了方便。其二是利用这种方法可以在描述多对多关系的连接表中使用两个外部来作为主键,我也反对这种做法,理由是:复合主键常常导致不良的外键,即当连接表成为另一个从表的主表,而依据上面的第二种方法成为这个表主键的一部分,然,这个表又有可能再成为其它从表的主表,其主键又有可能成了其它从表主键的一部分,如此传递下去,越靠后的从表,其主键将会包含越多的列了。 所以,主键是用于唯一标识每一行数据的字段或字段组合,而外键是一个表中的字段,它引用了另一个表中的主键,用于建立表与表之间的关系。 #### 引用[.reference_title] - *1* *2* [数据库主键、超、候选外键是什么?](https://blog.csdn.net/zhongkeyuanchongqing/article/details/117964661)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [主键外键](https://blog.csdn.net/zhangxiao26/article/details/20552361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值