0

ここに私のコードがあります

CREATE TABLE IF NOT EXISTS items
( 
id INT NOT NULL AUTO_INCREMENT, 
name varchar(256) , 
description TEXT,
price INT , 
images TEXT,
views INT ,
hidden TEXT,
purchases INT,
PRIMARY KEY (id) 
);

CREATE TABLE IF NOT EXISTS methods 
( 
method_id INT NOT NULL AUTO_INCREMENT, 
method varchar(256),
username varchar(256),
password varchar(256),
PRIMARY KEY (method_id)
);

CREATE TABLE IF NOT EXISTS payments
( 
payment_id INT NOT NULL AUTO_INCREMENT, 
item_id INT NOT NULL, 
method varchar(256),
display INT,
PRIMARY KEY (payment_id) ,
FOREIGN KEY (item_id) REFERENCES items (id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (method) REFERENCES methods (method) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=latin1;

最初の 2 つのテーブルは正常に生成されますが、3 番目の「支払い」でエラー コード 150 が返されます。FKに関連する必要があるのはどれですか?!

何か助けはありますか?

4

1 に答える 1

1

メソッド テーブルの主キーは ではありmethod_idませんmethod。そして、データ型はそうではありINTませんVARCHAR(256)

必要なもの:

CREATE TABLE IF NOT EXISTS payments
( 
  payment_id INT NOT NULL AUTO_INCREMENT, 
  item_id INT NOT NULL, 
  method_id int,  -- this is different
  display INT,
  PRIMARY KEY (payment_id) ,
  FOREIGN KEY (item_id) REFERENCES items (id) ON DELETE CASCADE ON UPDATE CASCADE,

  -- and this line is different
  FOREIGN KEY (method_id) REFERENCES methods (method_id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
于 2013-11-04T23:14:24.677 に答える