2013-03-08 103 views
2

我试图想出最好的解决方案来从我的SQL中的子表中删除行。如何级联删除父表行

例如,我有两个表,一个称为用户,另一个称为users_information。 第二个表users_information使用一个名为user_id的外键,它实际上是“users”表中的“id” 。

我想使用级联删除选项,每当我从“users”表中删除一行 (通过使用“id”ofc)我想删除users_information中的同一行,其中id = user_id。

我有一个很难计算出来,试图寻找和发现How do I use on delete cascade in mysql?

但事实并非很好地解释,我敢肯定,这是我的目标仍然为解决方案。

这是我的表结构,如果你看到任何我可能做错了/不是最好的方式,告诉我。

CREATE TABLE `users_information` (
    `id` int(20) NOT NULL AUTO_INCREMENT, 
    `user_id` int(11) NOT NULL, 
    `first_name` varchar(15) NOT NULL, 
    `last_name` varchar(15) NOT NULL, 
    `country` varchar(30) NOT NULL, 
    `profession` varchar(40) NOT NULL, 
    `gender` varchar(6) NOT NULL, 
    `birthday` datetime NOT NULL, 
    `city` varchar(50) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `user_id` (`user_id`) 
    CONSTRAINT `myForeignKey` FOREIGN KEY (`user_id`) 
    REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

    CREATE TABLE `users` (
    `id` int(20) NOT NULL AUTO_INCREMENT, 
    `password` varchar(82) NOT NULL, 
    `email` varchar(60) NOT NULL, 
    `created` date NOT NULL, 
    `user_type` int(2) NOT NULL, 
    `active` smallint(2) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

我忘了提:代码为 “users_information” 产生以下错误:

* #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONSTRAINT myForeignKey FOREIGN KEY (user_id) REFERENCES users (id) O' at line 13

+1

你后已经得到了正确的基本结构。与该FK一起,如果用户被删除,users_information中的任何关联记录也将被删除。 – 2013-03-08 16:47:08

+0

抱歉,我忘记提及“users_information”的代码会产生错误。我会更新我的问题。 – 2013-03-08 16:49:04

+0

在FK关系中链接的字段必须具有IDENTICAL定义。你有'int(11)'和'int(20)'users.id/users_information.userid字段。括号中的数字只是一个显示提示(显示多少位数)到mysql,但它仍然算作FK链接目的的“差异”。 – 2013-03-08 16:50:16

回答

2

添加一个逗号以下行

KEY user_iduser_id