SQL错误添加引用
问题描述:
当在我的MySQL数据库我有两个表:SQL错误添加引用
CREATE TABLE orders (
id BIGINT AUTO_INCREMENT,
user_id BIGINT DEFAULT 1 NOT NULL,
price DECIMAL(18, 2) NOT NULL,
name VARCHAR(255) NOT NULL,
surname VARCHAR(255) NOT NULL,
[...]
is_fulfilled TINYINT(1) DEFAULT '0' NOT NULL,
INDEX user_id_idx (user_id),
PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = INNODB;
和
CREATE TABLE user (
id INT AUTO_INCREMENT,
username VARCHAR(128) NOT NULL UNIQUE,
email VARCHAR(128) NOT NULL UNIQUE,
[...]
INDEX name_idx_idx (username),
PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = INNODB;
当我试图建立关系
ALTER TABLE orders ADD CONSTRAINT orders_user_id_user_id FOREIGN KEY (user_id) REFERENCES user(id);
我得到这个错误
#1005 - Can't create table 'druk.#sql-b38_173' (errno: 150)
那张桌子有什么问题吗?
答
这是一个非常奇怪的错误,与当前表单中的表格不相关。因此,您需要正确重新创建表。
但是,您确实有问题。列orders.user_id
的类型与user.id
的类型不匹配。您应该将其更改为:
user_id INT DEFAULT 1 NOT NULL,
Here是一个SQL Fidde。
我应该补充说,默认值为“1”似乎很奇怪。
答
只要确保两个字段匹配类型。将orders.user_id
更改为INT或将user.id
更改为BIGINT
。将orders.user_id
更换为INT
似乎更合理,除非您预计有数百万用户...
此问题已在此处回答; [链接回答errno 150](http://*.com/questions/4061293/mysql-cant-create-table-errno-150) 和这里; (http://*.com/questions/1457305/mysql-creating-tables-with-foreign-keys-giving-errno-150) – Intern87