sql 外键约束【表关系绑定】

外键

外键必须是表中的一个字段但不一定是该表的主键,但要对应的必须是另一张表的主键,外键的主要作用就是啊要保持数据的完整性,定义外键后不允许删除在另外一张表中具有关联关系的行【一条数据】。

  • 主表(父表):主键所在的表即为主表。
  • 从表(子表):外键所在的表即为从表。

什么时候使用外键约束

当两张表之间有有关联时可以采用外键约束进行绑定。

示例:有两张表分别为 tb_book【书 】 、 tb_reader【阅读】 ,显然没有书就无法阅读,所以 tb_book 为主表,tb_reader 为从表
// 创建tb_book
CREATE TABLE tb_book(
id int primary key auto_increment,
book_name varchar(50));
// 创建tb_reader
CREATE TABLE tb_reader(
id int primary key auto_increment,
bookId int,
constraint fk_book_id foreign key(bookId) references tb_book(id));
insert into book (book_name) values('喀尔巴阡古堡');
// 正确操作
insert into reader (readPage) values(45);
insert into reader (bookId, readPage) values (1, 30);

// 错误操作
delete from book where id = 1;
insert into reader (bookId, readPage) values (2, 30);

使用外键时注意

  • 一个表可以有一个或者多个外键。
  • 外键对应的是参照完整性,一个表的外键可以为空值,如果不为空值,则每一个外键的值必须是另一个表中主键的某一个值,否则会提示如下错误:
 insert into reader (bookId, readPage) values (30, 1);
 Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`test_db`.`reader`, 
 CONSTRAINT `fk_book_id` FOREIGN KEY (`bookId`) REFERENCES `book` (`id`)) 
  • 如果删除在另一张表中具有关联关系的行【一条数据】则会出一下异常:
delete from book where id = 1;
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`test_db`.`reader`, 
CONSTRAINT `fk_book_id` FOREIGN KEY (`bookId`) REFERENCES `book` (`id`))

如果创建时没有添加外键约束可以使用 alter table add 添加

alter table reader add constraint fk_book_id foreign key(bookNameId) references tb_book(id);
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值