添加引用时出现SQL错误

时间:2016-09-21 11:50:34

标签: mysql sql

在我的MySQL数据库中,我有两个表:

<select>
        @foreach (var item in Model.SexualOrientationList)
        {
            <option title='@item.SNOMED' value="@item.MasterID">@item.CodeDescription</option>
        }
    </select>

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);

表中有什么问题或者是什么?

2 个答案:

答案 0 :(得分:0)

这是一个非常奇怪的错误,似乎与您当前表单中的表无关。因此,您需要正确地重新创建表。

但是,确实有问题。列orders.user_id的类型与user.id的类型不匹配。你应该把它改成:

user_id INT DEFAULT 1 NOT NULL, 

Here是一个SQL Fidde。

我应该补充一下,将值默认为&#34; 1&#34;看起来很奇怪。

答案 1 :(得分:0)

确保两个字段都匹配该类型。将orders.user_id更改为INT或将user.id更改为BIGINT。将orders.user_id替换为INT似乎更合理,除非您期望数百万用户......