Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql表的外键中正确地级联删除?_Mysql_Sql_Foreign Keys_Sql Delete_Create Table - Fatal编程技术网

如何在mysql表的外键中正确地级联删除?

如何在mysql表的外键中正确地级联删除?,mysql,sql,foreign-keys,sql-delete,create-table,Mysql,Sql,Foreign Keys,Sql Delete,Create Table,我有三个带有外键的表,当我运行此命令时,它们应该在delete上级联 "DELETE FROM Tagmap WHERE excerptID = ?" 只有Tagmap中的映射,而extract和Tag中没有任何操作。我做错了什么 CREATE TABLE IF NOT EXISTS excerpt( excerptID INT UNSIGNED NOT NULL AUTO_INCREMENT, title VARCHAR(255) NOT NULL, te

我有三个带有外键的表,当我运行此命令时,它们应该在delete上级联

"DELETE FROM Tagmap WHERE excerptID = ?"
只有
Tagmap
中的映射,而
extract
Tag
中没有任何操作。我做错了什么

CREATE TABLE IF NOT EXISTS excerpt(
  excerptID INT UNSIGNED NOT NULL AUTO_INCREMENT, 
  title VARCHAR(255) NOT NULL, 
  text VARCHAR(2500) NOT NULL,
  comments VARCHAR(2500) NOT NULL,
  PRIMARY KEY (excerptID)
) ENGINE=INNODB CHARACTER SET utf8mb4;

CREATE TABLE IF NOT EXISTS tag(
  tagID INT UNSIGNED NOT NULL AUTO_INCREMENT,
  description VARCHAR(255) NOT NULL , 
  PRIMARY KEY (tagID)
) ENGINE=INNODB CHARACTER SET utf8mb4;

CREATE TABLE IF NOT EXISTS tagmap (
  excerptID INT UNSIGNED NOT NULL, 
  tagID INT UNSIGNED NOT NULL, 
  PRIMARY KEY (excerptID, tagID),
    CONSTRAINT excerptFK FOREIGN KEY (excerptID) REFERENCES excerpt (excerptID)
    ON DELETE CASCADE 
    ON UPDATE CASCADE,
    CONSTRAINT tagFK FOREIGN KEY (tagID) REFERENCES tag (tagID)
    ON DELETE CASCADE 
    ON UPDATE CASCADE
) ENGINE=INNODB;

外键不是这样工作的。您从父表中删除(此处为
标记
,或
摘录
),然后自动删除子记录。如果你仔细想想,另一种方法是不安全的,因为可能有多个孩子引用同一个家长

因此,您通常会运行以下查询:

DELETE FROM excerpt WHERE excerptID = ?
外键约束的
on delete cascade
选项将自动删除
tagmap
中的所有记录,并带有相应的
摘录ID