mysql 两个外键级联删除的问题

mysql 两个外键级联删除的问题,第1张

DROP TABLE IF EXISTS `courseteacher`;
CREATE TABLE `courseteacher` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tno` int(10) unsigned NOT NULL,
`cno` int(10) unsigned NOT NULL,
PRIMARY KEY (`ID`),
KEY `FK_courseteacher_1teacher1` (`tno`),
KEY `FK_courseteacher_2classes1` (`cno`),
CONSTRAINT `FK_courseteacher_1terchar1` FOREIGN KEY (`tno`) REFERENCES `Teacher` (`tno`) ON DELETE CASCADE,
CONSTRAINT `FK_courseteacher_2clases1` FOREIGN KEY (`cno`) REFERENCES `Course` (`cno`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
试过没问题啊,你往这个表插入数据的前提是tno和cno必须存在于Teacher表和Course表

你是要做级联删除子表,还是单单只删除主表的值?
比如说有两个表 father,son
做级联删除的话,可以这么做,
delete father,son from father inner join son on fatherid=sonfatherid where fatherid=
或者你可以在建son表的时候 指定约束扩展项,on delete casecade on update
如果只是单单需要删除主表,那么最简单的做法是取消系统外键约束
set foreign_key_checks=off
然后尽情去删把

有外键的情况下一般要先关掉外键的作用,然后删除,在开启。以为有外键的表一般不能删除的。如果是mysql数据库的话
先关闭外键
SET FOREIGN_KEY_CHECKS=0;
然后删除
在开启
SET FOREIGN_KEY_CHECKS=1;

1、只有InnoDB类型的表才可以使用外键。mysql默认是MyISAM,这种类型不支持外键约束
2、外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联 *** 作。
3、外键的作用:
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值。
4、建立外键的前提:
两个表必须是InnoDB表类型。
使用在外键关系的域必须为索引型(Index)。
使用在外键关系的域必须与数据类型相似。
5、创建的步骤
指定主键关键字: foreign key(列名)。
引用外键关键字: references <外键表名>(外键列名)。
6、事件触发限制:on delete和on update , 可设参数cascade(跟随外键改动)。
restrict(限制外表中的外键改动),set
Null(设空值),set Default(设默认值)。
[默认]no action
7、举例
outTable表 主键 id 类型 int
创建含有外键的表:
代码如下:
create table temp(
id int,
name
char(20),
foreign key(id) references outTable(id) on delete cascade on update
cascade);
说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表中对应的列筛除 当外键的值改变 本表中对应的列值改变。
代码如下:
create table temp( id int, name char(20),
foreign key(id) references outTable(id) on delete cascade on update
cascade);


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12994510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存