我有table:
DROP TABLE IF EXISTS `files`;
CREATE TABLE IF NOT EXISTS `files` (
`id` VARCHAR(36) NOT NULL,
`name` VARCHAR(50) NOT NULL,
`extension` VARCHAR(5) NOT NULL,
`version` INT(11) NOT NULL,
`date` DATE NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
和标记文件:
DROP TABLE If EXISTS `tags_files`;
CREATE TABLE IF NOT EXISTS `tags_files` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`tag_id` INT(11) NOT NULL,
`file_id` VARCHAR(36) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT FOREIGN KEY (`file_id`) REFERENCES `files` (`id`) ON DELETE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果我现在删除tags\u files表的一个或多个条目,则文件中没有删除的条目。有人能告诉我为什么吗?
1条答案
按热度按时间x6h2sr281#
现在的约束将从中删除
tags_files
将在上删除引用的id的时间files
.如果您需要从中自动删除
files
从中删除时tags_files
,则“约束”必须处于启用状态files
table。这样地:
好吧,在上面的例子中会出现一个错误,因为mysql不允许对varchar类型进行约束。如果你把它改成char你可以。但是,由于约束,您还需要更改执行查询的顺序。这样做: