MYSQL table 不允许多个外键
MYSQL table wont allow multiple foreign keys
我知道这个问题已经被问过一次又一次,我已经尝试了很多次,但不明白为什么我总是出错,但我正在尝试将订单详细信息 table 连接到订单项目、用户和付款 table,但 SQL 即将出现。 (这是一个学校项目)
我已经能够将 table 与两个约束连接起来,但从未与三个约束连接。
#1005 - Can't create table oursmall
.order_details
(errno: 150 "Foreign key constraint is incorrectly formed")
CREATE TABLE IF NOT EXISTS order_details(
order_details_id INT(10) NOT NULL AUTO_INCREMENT,
order_items_id INT(10) NOT NULL,
users_id INT(10) NOT NULL,
total DECIMAL(6,2) NOT NULL,
payment_id INT(10) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
modified_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(order_details_id),
CONSTRAINT fk_order FOREIGN KEY(order_items_id) REFERENCES order_items(order_items_id),
CONSTRAINT fk_users FOREIGN KEY(users_id) REFERENCES users(users_id),
CONSTRAINT fk_payment FOREIGN KEY(payment_id) REFERENCES users(payment_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE="utf8_unicode_ci";
谢谢!
外键引用的列必须是引用的 table 的键。主键或至少一个辅助唯一键。*
CONSTRAINT fk_payment FOREIGN KEY(payment_id) REFERENCES users(payment_id)
payment_id
真的是 users
table 的主键或唯一键吗?如果是的话我会很惊讶。
第二个外键引用users.users_id
,对吧?这就是我认为 table.
的主键
* InnoDB 支持 non-standard 特性,允许引用的列是任何索引列,甚至是 non-unique 列。但这不是SQL语言中外键的标准,我不建议这样做。例如,如果外键引用的值可能出现在父 table 的多行中,这意味着什么?哪一行是真正的父行?
我知道这个问题已经被问过一次又一次,我已经尝试了很多次,但不明白为什么我总是出错,但我正在尝试将订单详细信息 table 连接到订单项目、用户和付款 table,但 SQL 即将出现。 (这是一个学校项目)
我已经能够将 table 与两个约束连接起来,但从未与三个约束连接。
#1005 - Can't create table
oursmall
.order_details
(errno: 150 "Foreign key constraint is incorrectly formed")
CREATE TABLE IF NOT EXISTS order_details( order_details_id INT(10) NOT NULL AUTO_INCREMENT, order_items_id INT(10) NOT NULL, users_id INT(10) NOT NULL, total DECIMAL(6,2) NOT NULL, payment_id INT(10) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, modified_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(order_details_id), CONSTRAINT fk_order FOREIGN KEY(order_items_id) REFERENCES order_items(order_items_id), CONSTRAINT fk_users FOREIGN KEY(users_id) REFERENCES users(users_id), CONSTRAINT fk_payment FOREIGN KEY(payment_id) REFERENCES users(payment_id) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE="utf8_unicode_ci";
谢谢!
外键引用的列必须是引用的 table 的键。主键或至少一个辅助唯一键。*
CONSTRAINT fk_payment FOREIGN KEY(payment_id) REFERENCES users(payment_id)
payment_id
真的是 users
table 的主键或唯一键吗?如果是的话我会很惊讶。
第二个外键引用users.users_id
,对吧?这就是我认为 table.
* InnoDB 支持 non-standard 特性,允许引用的列是任何索引列,甚至是 non-unique 列。但这不是SQL语言中外键的标准,我不建议这样做。例如,如果外键引用的值可能出现在父 table 的多行中,这意味着什么?哪一行是真正的父行?