gpt4 book ai didi

mysql - 为什么 UNSIGNED 不能用于 MYSQL 中的 FOREIGN KEY?

转载 作者:可可西里 更新时间:2023-11-01 07:55:59 26 4
gpt4 key购买 nike

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

请看如下结果:

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;

ERROR 1005 (HY000): Can't create table 'TL_EVENT_COMMENT' (errno: 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。

最佳答案

被引用,referee 必须具有相同的定义。如果将 unsigned 添加到 main,则外键也必须是 unsigned,反之亦然。字段的类型和定义必须匹配。

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

关于mysql - 为什么 UNSIGNED 不能用于 MYSQL 中的 FOREIGN KEY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35790814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com