删除父记录时删除子记录

时间:2014-07-01 22:21:09

标签: mysql sql phpmyadmin

我一直在尝试使用ON DELETE CASCADE ON UPDATE CASCADE但似乎没有用。

我的数据库托管在phpmyadmin.com上。我用来创建表的查询是:

CREATE TABLE IF NOT EXISTS Workers (ID_Dip char(15) PRIMARY KEY,Nome Char(20) NOT NULL,Cognome char (20) NOT NULL,DataN Date NOT NULL,Category char(10) NOT NULL);
CREATE TABLE IF NOT EXISTS User (userID char(20) PRIMARY KEY,pass Char(20) NOT   NULL,ID_Worker char(15) References Worker(ID_Dip) On Delete Cascade On Update Cascade);

INSERT INTO `Workers`(`ID_Dip`, `Nome`, `Cognome`, `DataN`, `Category`) VALUES ("AV690V","myname","mysurname","1993-11-07","admin");
INSERT INTO `User`(`UserID`, `pass`, `ID_Worker`) VALUES ("myUserName","123","AV690V");

问题是,当我删除ID = AV690V表中Workers的记录时,User表中的相应记录不会自动删除(应该发生的情况)由于ON DELETE CASCADE)而自动生成。

删除父记录时如何删除子记录?

2 个答案:

答案 0 :(得分:0)

来自http://www.mysqltutorial.org/mysql-on-delete-cascade/

  

请注意,ON DELETE CASCADE仅适用于存储的表   引擎支持外键,例如InnoDB。有些表类型没有   支持MyISAM等外键,所以你应该选择合适的   计划使用MySQL ON的表的存储引擎   删除CASCADE参考操作。

那么,一个重要的问题:你的桌子使用哪个存储引擎? :)

答案 1 :(得分:0)

来自docs

  

MySQL无法识别或支持“内联REFERENCES规范”(如SQL标准中所定义),其中引用被定义为列规范的一部分。 MySQL仅在指定为单独的REFERENCES规范的一部分时接受FOREIGN KEY子句。

您应该明确定义外键:

CREATE TABLE IF NOT EXISTS
       User
       (
       userID char(20) PRIMARY KEY,
       pass Char(20) NOT NULL,
       ID_Worker char(15),
       FOREIGN KEY
               fk_user_worker (id_worker)
       REFERENCES
               Worker (ID_Dip)
       ON DELETE CASCADE
       ON UPDATE CASCADE
       )