【问题标题】:Why UNSIGNED can't be used for FOREIGN KEY in MYSQL?为什么 UNSIGNED 不能用于 MYSQL 中的 FOREIGN KEY?
【发布时间】:2016-06-17 21:05:59
【问题描述】:

当我想使用外键创建表时,我遇到了一个奇怪的问题。

请看以下结果:

mysql> CREATE TABLE IF NOT EXISTS TL_USER(
    ->   user_id INT(10) UNSIGNED NOT NULL PRIMARY KEY,
    ->   nickname VARCHAR(45) NULL
    ->   ) ENGINE = InnoDB;
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE IF NOT EXISTS TL_EVENT_COMMENT (
    ->   event_comment_id INT PRIMARY key ,
    ->   comment VARCHAR(45) NULL,
    ->   user_id INT NULL,
    ->   FOREIGN KEY (`user_id`) REFERENCES TL_USER (`user_id`)
    ->   ) ENGINE = InnoDB;

错误 1005 (HY000): 无法创建表 'TL_EVENT_COMMENT' (错误号:150)

当我将“user_id INT(10) UNSIGNED NOT NULL PRIMARY KEY”更改为“user_id INT(10) NOT NULL PRIMARY KEY”时,它可以工作。

mysql> CREATE TABLE IF NOT EXISTS TL_USER(
    ->   user_id INT(10) NOT NULL PRIMARY KEY,
    ->   nickname VARCHAR(45) NULL
    ->   ) ENGINE = InnoDB;
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE IF NOT EXISTS TL_EVENT_COMMENT (
    ->   event_comment_id INT PRIMARY key ,
    ->   comment VARCHAR(45) NULL,
    ->   user_id INT NULL,
    ->   FOREIGN KEY (`user_id`) REFERENCES TL_USER (`user_id`)
    ->   ) ENGINE = InnoDB;
Query OK, 0 rows affected (0.02 sec)

问题是当我为 user_id 添加 UNSIGNED 时,如果我不添加它会出现该错误,它可以工作,谁能解释为什么 UNSIGNED 不能用于 FOREIGN KEY?

我怎样才能让它工作?

MYSQL 版本为 5.5.47-0ubuntu0.14.04.1。

【问题讨论】:

  • 确实,我太粗心了!谢谢。

标签: mysql sql foreign-keys


【解决方案1】:

Referenced,和裁判必须是同一个定义。如果将 unsigned 添加到 main,则外键也必须是 unsigned,反之亦然。字段的类型和定义必须匹配。

我知道有时这很痛苦,这就是为什么您需要保持一致,尤其是在处理许多表格时。例如,为自己制定一条规则,将所有主键分配为 UNSIGNED INT(11),这样您就不必猜测要为外键使用哪个定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 2016-07-24
    • 2012-02-08
    • 2012-11-20
    • 2016-11-29
    • 1970-01-01
    相关资源
    最近更新 更多