Похоже, что мое каскадное действие здесь не работает. У меня две таблицы определены следующим образом.
Может ли кто-нибудь сказать мне, что случилось? Обновление system_rigs "id" не будет каскадироваться в таблицу сообщений.
CREATE TABLE `edr_messages` (
`message_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`rig_id` int(10) unsigned NOT NULL,
`message` text,
PRIMARY KEY (`message_id`,`rig_id`),
KEY `pkey` (`message_id`),
KEY `rig_id` (`rig_id`),
CONSTRAINT `edr_messages_ibfk_1` FOREIGN KEY (`rig_id`)
REFERENCES `system_rigs` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1$$
CREATE TABLE `system_rigs` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1$$
Я просто попробовал это, и это сработало для меня (mysql 5.1.41). Возможно, нам не ясно, что должно произойти, поэтому позвольте мне показать вам, что я пробовал... Я запустил ваши предложения create table
(в обратном порядке). Затем я выполнил следующее тестирование:
insert into system_rigs (name) values('computron');
system_rigs
id: 13
name: computron
insert into edr_messages (rig_id, message) values (13, 'here\ a message');
edr_messages
id: 2
rig_id: 13
сообщение: здесь сообщение
update system_rigs set id = 26 where id = 13;
system_rigs
id: 26
name: computronedr_messages
id: 2
rig_id: 26
сообщение: здесь сообщение