SQL主键、外键

主键:唯一区分出不同的记录的字段。

选取主键原则:不使用任何业务相关的字段作为主键。

常见可作为id字段的类型:

  1. 自增整数类型
  2. 全局唯一GUID类型(GUID算法通过网卡MAC地址、时间戳和随机数生成的字符串)

联合主键:两个或更多的字段都设置为主键。(允许一列有重复)

 

外键:实现一对多、多对多和一对一的关系。

可以通过数据库来约束,也可以不设置约束,仅靠应用程序的逻辑来保证。 

一对多: 

学生表:students

 id name other columns...
 1小明 ...
 2 小红... 

班级表:classes

 id name other columns...
 1一班...
 2二班... 
 id class_id name other columns...
 1 1小明...
 2 1小红... 
 3 2小白...

定义外键约束:

ALTER TABLE students
ADD CONSTRAINT fk_class_id FOREIGN KEY (class_id) REFERENCES classes (id);

fk_class_id  :  外键约束名称

FOREIGN KEY (class_id)  :指定class_id作为外键

REFERNCES classes (id) :指定将外键关联到classes表的主键 

外键约束的作用:保证关系型数据库无法插入无效的数据。 

删除一个外键约束: 

ALTER TABLE students
DROP FOREIGN KEY fk_class_id;

注意:删除外键约束并没有删除外键这一列。删除列:DROP COLUMN ...实现。

 

多对多:通过两个一对多关系实现,即通过一个中间表,关联两个一对多关系。

老师表:teachers

 id name
 1 张老师
 2 王老师
 3 李老师
 4 赵老师

 班级表:classes

 idname 
 1 一班
 2 二班

 中间表:teacher_class (关联两个一对多关系)

 idteacher_idclass_id 
 1 1
 21 2
 32 1
 42 2
 53 1
 64 2

 一对一:一个表的记录对应到另一个表的唯一记录。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值