0

3 つのテーブルを作成するスキーマを次に示します。3 つ目は、次の 2 つの外部キーを持っています。MySQL が 3 番目のものを作成できない理由がわかりません。列の型が一致します。

DROP TABLE IF EXISTS `SET`;
CREATE TABLE IF NOT EXISTS `SET` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `SET_ID` int(11) DEFAULT 0,
  `SET_NAME` varchar(32) NOT NULL,
  `SET_RELEASE_DATE` date NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `TYPE`;
CREATE TABLE IF NOT EXISTS `TYPE` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `TYPE_ID` int(11) DEFAULT 0,
  `TYPE_NAME` varchar(32) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `CARD`;
CREATE TABLE IF NOT EXISTS `CARD` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `CARD_ID` int(11) NOT NULL DEFAULT 0,
  `CARD_NAME` varchar(64) DEFAULT NULL,
  `SET_ID` int(11) DEFAULT 0,
  `TYPE_1` int(11) DEFAULT 0,
  `TYPE_2` int(11) DEFAULT 0,
  `TYPE_3` int(11) DEFAULT 0,
  `TYPE_4` int(11) DEFAULT 0,
  PRIMARY KEY (`ID`),
  CONSTRAINT `card_idfk_1` FOREIGN KEY (`SET_ID`)
    REFERENCES `SET`(`SET_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `card_t1fk_1` FOREIGN KEY (`TYPE_1`)
    REFERENCES `TYPE`(`TYPE_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `card_t2fk_1` FOREIGN KEY (`TYPE_2`)
    REFERENCES `TYPE`(`TYPE_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `card_t3fk_1` FOREIGN KEY (`TYPE_3`)
    REFERENCES `TYPE`(`TYPE_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `card_t4fk_1` FOREIGN KEY (`TYPE_4`)
    REFERENCES `TYPE`(`TYPE_ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
4

1 に答える 1

1

外部キー関係を作成する場合、問題のキーは参照テーブルにインデックスを持っている必要があります (こちらを参照)。

たとえば、次のコード:

DROP TABLE IF EXISTS `SET`;
CREATE TABLE IF NOT EXISTS `SET` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `SET_ID` int(11) NOT NULL DEFAULT 0,
  `SET_NAME` varchar(32) NOT NULL,
  `SET_RELEASE_DATE` date NOT NULL,
  PRIMARY KEY (`ID`),
  index(set_id)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

card_idfk_1制約に関する問題を修正します。key注: または のいずれかindexをキーワードとして使用できます。

于 2013-05-26T01:27:06.863 に答える