0

MySQL (mariadb Ver 15.1 Distrib 10.1.44-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2) 给了我这个错误: ERROR 1005 (HY000) at line 263: Can't create table `Houdini`.`quest_award_item` (errno: 150 "Foreign key constraint is incorrectly formed")

尝试创建此表时:

DROP TABLE IF EXISTS quest_award_item;
CREATE TABLE quest_award_item (
  quest_id INT NOT NULL,
  item_id INT NOT NULL,
  PRIMARY KEY (quest_id, item_id),
  CONSTRAINT quest_award_item_ibfk_1 FOREIGN KEY (quest_id) REFERENCES quest (id) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT quest_award_item_ibfk_2 FOREIGN KEY (item_id) REFERENCES item (id) ON DELETE CASCADE ON UPDATE CASCADE
);

我之前遇到的错误已通过更改主键和外键之间的数据类型来解决,但在此表中,主键外键。这也不是主键是外键的问题,因为它在表的后面工作得很好——一个例子是:

DROP TABLE IF EXISTS puffle_treasure_item;
CREATE TABLE puffle_treasure_item (
  puffle_id INT NOT NULL,
  item_id INT NOT NULL,
  PRIMARY KEY (puffle_id, item_id),
  CONSTRAINT puffle_treasure_item_ibfk_1 FOREIGN KEY (puffle_id) REFERENCES puffle (id) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT puffle_treasure_item_ibfk_2 FOREIGN KEY (item_id) REFERENCES item (id) ON DELETE CASCADE ON UPDATE CASCADE
);

谁能弄清楚这个问题?提前致谢。

编辑:::

参考表是:

DROP TABLE IF EXISTS item;
CREATE TABLE item (
  id INT NOT NULL,
  name VARCHAR(50),
  type SMALLINT NOT NULL DEFAULT 1,
  cost INT NOT NULL DEFAULT 0,
  member BOOLEAN NOT NULL DEFAULT FALSE,
  bait BOOLEAN NOT NULL DEFAULT FALSE,
  patched BOOLEAN NOT NULL DEFAULT FALSE,
  legacy_inventory BOOLEAN NOT NULL DEFAULT FALSE,
  vanilla_inventory BOOLEAN NOT NULL DEFAULT FALSE,
  epf BOOLEAN NOT NULL DEFAULT FALSE,
  tour BOOLEAN NOT NULL DEFAULT FALSE,
  release_date DATE NOT NULL,
  treasure BOOLEAN NOT NULL DEFAULT FALSE,
  innocent BOOLEAN NOT NULL DEFAULT FALSE,
  PRIMARY KEY (id)
);

DROP TABLE IF EXISTS puffle;
CREATE TABLE puffle (
  id INT NOT NULL,
  parent_id INT DEFAULT NULL,
  name VARCHAR(50) NOT NULL DEFAULT '',
  cost INT NOT NULL DEFAULT 0,
  member BOOLEAN NOT NULL DEFAULT FALSE,
  favourite_food INT NOT NULL,
  favourite_toy INT DEFAULT NULL,
  runaway_postcard INT DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT puffle_ibfk_1 FOREIGN KEY (parent_id) REFERENCES puffle (id) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT puffle_ibfk_2 FOREIGN KEY (favourite_food) REFERENCES puffle_item (id) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT puffle_ibfk_3 FOREIGN KEY (favourite_toy) REFERENCES puffle_item (id) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT puffle_ibfk_4 FOREIGN KEY (runaway_postcard) REFERENCES postcard (id) ON DELETE CASCADE ON UPDATE CASCADE
);
4

0 回答 0