一部の行とリレーションが削除されたときにデータベースをクリーンアップする際に問題があります。
CREATE TABLE IF NOT EXISTS `cms_users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(50) DEFAULT NULL,
`last_name` varchar(50) DEFAULT NULL,
`id_account_type` smallint(2) unsigned NOT NULL,
PRIMARY KEY (`id`)
);
上記は一部のユーザーです。それらのユーザーの子があり、それらは別のテーブルに保存されます。
CREATE TABLE IF NOT EXISTS `cms_users_relations` (
`id_user` int(10) unsigned NOT NULL,
`id_parent` int(10) unsigned DEFAULT NULL,
UNIQUE KEY `id_user` (`id_user`),
KEY `constraint_9` (`id_parent`)
);
ALTER TABLE `cms_users_relations`
ADD CONSTRAINT `constraint_8` FOREIGN KEY (`id_user`) REFERENCES `cms_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `constraint_9` FOREIGN KEY (`id_parent`) REFERENCES `cms_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
問題は、親を cms_users から削除すると、すべての子も削除する必要がありますが、削除されないことです。この目的のためにトリガーを作成しましたが、機能しません。
DELIMITER //
CREATE TRIGGER `delete_user` AFTER DELETE ON `cms_users_relations`
FOR EACH ROW BEGIN
DELETE FROM cms_users WHERE OLD.id_user = cms_users.id;
END
//
DELIMITER ;
mysqlサーバーは、ユーザーを削除してから、外部キーでリレーションを削除してから、トリガーを配置する必要があることを気にしていないようです...
何か案は?