我一直在尝试使用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
)而自动生成。
删除父记录时如何删除子记录?
答案 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
)