php - MySQL语法错误-无法创建表

标签 php mysql syntax syntax-error

这是我的代码

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 个表生成正常,但第三个“付款”给了我错误代码 150!这应该与FK有关?!

有什么帮助吗?

最佳答案

方法表中的主键是 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;

关于php - MySQL语法错误-无法创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779079/

相关文章:

PHP 错误 "T_ENCAPSED_AND_WHITESPACE, expecting T_STRING"

php - Composer 不作曲 - 说找不到文件

php - MySQL查询,多列求和

PHP Composer 无法在 Mac 上运行

php - 如何让 Node.js 与 vagrant share 一起工作?

mysql - 存储过程未按预期工作

python - 优胜美地 : Python MySQLlib issue - 'no suitable image found'

css - 有没有解释为什么我们不能在 CSS 声明 block 之间放置分号?

c++ - 通过类型别名从构造函数转发模板推导

java - Java中的单引号和双引号之间有区别吗?