Иностранные ключи не будут каскадно в MySQL

0

Похоже, что мое каскадное действие здесь не работает. У меня две таблицы определены следующим образом.

Может ли кто-нибудь сказать мне, что случилось? Обновление 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$$  
  • 0
    Обратите внимание, что обычно не рекомендуется обновлять первичные ключи. Тем не менее, это правило не применяется MySQL , поэтому я не понимаю, почему ваша схема не работает для вас ...
Теги:
foreign-keys

1 ответ

0

Я просто попробовал это, и это сработало для меня (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: computron

edr_messages
id: 2
rig_id: 26
сообщение: здесь сообщение

Ещё вопросы

Сообщество Overcoder
Наверх
Меню