create table t1 (f1 int primary key) engine=innodb; create table t2 (f1 int primary key, constraint c1 foreign key (f1) references t1(f1) on update cascade on delete cascade) engine=innodb; create table t3 (f1 int primary key, constraint c2 foreign key (f1) references t1(f1) on update cascade on delete cascade) engine=innodb; show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `f1` int(11) NOT NULL, PRIMARY KEY (`f1`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci show create table t2; Table Create Table t2 CREATE TABLE `t2` ( `f1` int(11) NOT NULL, PRIMARY KEY (`f1`), CONSTRAINT `c1` FOREIGN KEY (`f1`) REFERENCES `t1` (`f1`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci show create table t3; Table Create Table t3 CREATE TABLE `t3` ( `f1` int(11) NOT NULL, PRIMARY KEY (`f1`), CONSTRAINT `c2` FOREIGN KEY (`f1`) REFERENCES `t1` (`f1`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci insert into t1 values (1); insert into t1 values (2); insert into t1 values (3); insert into t2 values (1); insert into t2 values (2); insert into t2 values (3); insert into t3 values (1); insert into t3 values (2); insert into t3 values (3); select f1 from t1; f1 1 2 3 select f1 from t2; f1 1 2 3 select f1 from t3; f1 1 2 3 set @save_dbug = @@debug_dbug; set debug_dbug = '+d,dml_cascade_only_once'; set debug_dbug = '+d,row_upd_cascade_lock_wait_err'; update t1 set f1 = 100 where f1 = 2; select f1 from t1; f1 1 3 100 select f1 from t2; f1 1 3 100 select f1 from t3; f1 1 3 100 set debug_dbug = @save_dbug; drop table t2; drop table t3; drop table t1;