mysql上的删除级联不工作

pinkon5k  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(310)

我有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表的一个或多个条目,则文件中没有删除的条目。有人能告诉我为什么吗?

x6h2sr28

x6h2sr281#

现在的约束将从中删除 tags_files 将在上删除引用的id的时间 files .
如果您需要从中自动删除 files 从中删除时 tags_files ,则“约束”必须处于启用状态 files 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`),
    CONSTRAINT FOREIGN KEY (`id`) REFERENCES `tags_files` (`file_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
and TagsFiles:

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`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

好吧,在上面的例子中会出现一个错误,因为mysql不允许对varchar类型进行约束。如果你把它改成char你可以。但是,由于约束,您还需要更改执行查询的顺序。这样做:

DROP TABLE IF EXISTS `files`;
DROP TABLE If EXISTS  `tags_files`;

CREATE TABLE IF NOT EXISTS `tags_files` (
    `id` INT(11) NOT NULL,
    `tag_id` INT(11) NOT NULL,
    `file_id` char(36) NOT NULL,
    PRIMARY KEY (`file_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `files` (
    `id` char(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`),
    CONSTRAINT FOREIGN KEY (`id`) REFERENCES `tags_files` (`file_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

相关问题