外键约束,级联操作,索引

父表中的主键字段或唯一键字段可以被子表引用为外键
一个表中可以有多个外键约束,一个外键约束也可以同时作用在多个字段上
子表的外键值必须要在父表的主键值范围之内,外键值可以重复,可以为null
constraint fk_ticket_sid foreign key (sid) references seat (sid)
先创建父表seat表,因为子表要引用父表

在外键约束下,在插入数据的时候,需要先插入父表数据,
后插入子表数据。因为子表的外键值必须要在父表的主键值范围之内

在外键的约束下,不能更新父表的主键字段值(因为还有子表数据在引用)
如何更新父表的主键值?
1.把子表的相关数据的外键值设置为null
update ticket set sid = null where sid = 1;
2.更新父表中的主键字段值
update seat set sid = 2 where sid = 1;
3.把子表中的相关数据外键值设置为更新后的父表
update ticket set sid = 2 where …
4.在外键约束下,删除数据的时候,需要先删除子表数据
或把子表数据的外键值设置为null后删除父表
5.在外键约束下,在删除表的时候,要先删除子表,后删父表

在实际开发中对待外键约束的不用方式:
1.在数据库中使用外键约束,就是通过外键约束保证数据的安全
2.在数据库不使用外键约束,而是在Java程序中通过逻辑控制
保证数据的安全。

级联更新:on update cascade
外键约束下指定了级联更新,这样可以直接更新父表中的主键值,直接update
并且会连同子表中的相关数据一起更新
constraint fk_ticket_sid foreign key (sid) references seat (sid) on update cascade

级联删除:on delete cascade
外键约束下,可以指定级联删除,这样可以直接删除父表中的数据
并且会连同子表中的数据一起删除
级联操作慎用,一般不用。

删除约束:
alter table drop primary key
alter table drop foreign key fk_ticket_sid
删除非空约束,不能使用drop,而是使用modify
alter table xxx modify xxx varchar(10) null;
可以为null,也就是删除了非空约束。

数据库会自动为主键创建索引。索引查询,效率高
什么样的字段要创建索引?
该字段数据量庞大,很少的DML操作(增删改)
经常出现在where条件中
create index xxx_index on xx(xxx)
show index from xxx

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值