2

なぜこの外部キーを追加できないのか疑問に思っています.これは私のスキーマです

CREATE TABLE members(
  member_id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  num_1 int,
  num_2 int,
  password VARCHAR(50) NOT NULL,
  PRIMARY KEY (member_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE contacts(
  contact_id INT NOT NULL AUTO_INCREMENT,
  s1 int,
  phone_number VARCHAR(10) NOT NULL,
  s2 int,
  s3 int,
  PRIMARY KEY (contact_id),
  FOREIGN KEY (s1) REFERENCES members(num_1) ON DELETE CASCADE ON UPDATE CASCADE,
  FOREIGN KEY (s2) REFERENCES members(num_2) ON DELETE CASCADE ON UPDATE CASCADE,
  FOREIGN KEY (s3) REFERENCES members(member_id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8

mysql ターミナルでこのエラーが発生します ERROR 1215 (HY000): Cannot add foreign key constraint

私のスキーマに問題はありますか?.

4

1 に答える 1

5

このように私のために働きます:

CREATE TABLE members(
  member_id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  num_1 int,
  num_2 int,
  password VARCHAR(50) NOT NULL,
  PRIMARY KEY (member_id),
  key idx_num1 (num_1),
  key idx_num2 (num_2)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE contacts(
  contact_id INT NOT NULL AUTO_INCREMENT,
  s1 int,
  phone_number VARCHAR(10) NOT NULL,
  s2 int,
  s3 int,
  PRIMARY KEY (contact_id),
  FOREIGN KEY (s1) REFERENCES members(num_1) ON DELETE CASCADE ON UPDATE CASCADE,
  FOREIGN KEY (s2) REFERENCES members(num_2) ON DELETE CASCADE ON UPDATE CASCADE,
  FOREIGN KEY (s3) REFERENCES members(member_id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

追加したばかり

  key idx_num1 (num_1),
  key idx_num2 (num_2)

テーブルメンバーで。外部キーは、インデックス付きの列を参照する必要があります (一意である必要はなく、可能である必要もありませんNOT NULL)。

マニュアルから:

InnoDB では、外部キーが任意のインデックス列または列のグループを参照できます。ただし、参照されるテーブルには、参照される列が最初の列として同じ順序でリストされているインデックスが必要です。

于 2013-07-03T08:39:21.213 に答える