MySQL外键的使用

MySQL外键的使用

概念通识:

      关于MySQL的外键约束,总结起来就是使两个表或者一个表中的两个列有以从属关系为主的联系。

举例说明:

      主表是老师,从表是学生。

      为学生表建立外键约束:使得每个学生都对应一个老师,老师表不做任何改变(但在逻辑上一个老师可对应多个学生,实际上在数据库内部也对此一对多的关系做了处理,证明见后)

代码解释:

create table teachers(
	teacher_id int auto_increment primary key,
	teacher_name varchar(255) not null default ''
);

create table students(
	student_id int auto_increment primary key,
	student_name varchar(255) not null default '',
	teacher_id int,
	foreign key(teacher_id) references teachers(teacher_id)
);
这样就建立了学生表与老师表之间的从属联系。

需要注意的是:如果老师表中有一个老师和至少一个学生建立了从属关系,则要删除这个老师,必须先删除所有与他有联系的学生。代码测试说明如下:

insert into teachers values(null, 'Tom');
insert into students values(null, 'Sarah',1);
delete from teachers where teacher_id = 1;#error

上述代码的第五行是错误的:cannot delete or update a parent row: a foreign key constraint fails

即由于该老师仍然与某学生有从属关系,所以不能被删除,但如果给该行代码之前加上:

delete from students where teacher_id = 1;

则代码就会成功的运行。

补充:

个人认为外键还有一个很好用的用法:

可以在添加外键的时候加上约束:on delete cascade( 或者 on delete set null),则会在删除主表记录的时候删除所有与之相关的从表记录(或者将从表记录置为null)。

代码解释:

create table students_02(
	student_id int auto_increment primary key,
	student_name varchar(255) not null default '',
	teacher_id int,
	foreign key(teacher_id) references teachers(teacher_id) on delete cascade
);
insert into teachers values(null, 'Todd');
insert into students_02 values(null,'Amy',2);
insert into students_02 values(null,'Teddy',2);

select * from students_02;#有两条记录

delete from teachers where teacher_id = 2;
select * from students_02;#均被删除
可以看得出,所有插入students_02中的从属于teacher_id=2的记录均被删除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值