資料型別不一致。
你的主表, id 的資料型別是 int unsigned
而你的子表, hoyyb_id 資料型別是 int
因為:
INT[(M)] [UNSIGNED] [ZEROFILL]
普通大小的整數。帶符號的範圍是-2147483648到2147483647。無符號的範圍是0到4294967295。
2種解決辦法
1、 主表資料型別, 修改為 int
2、子表資料型別, 修改為 int unsigned
下面是一個模擬的例子:
-- 主表, id 是 INT unsigned
mysql> CREATE TABLE test_main2 (
-> id INT unsigned NOT NULL,
-> value VARCHAR(10),
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected (0.01 sec)
-- 子表, 資料型別 int 的時候。
mysql> CREATE TABLE test_sub2 (
-> id INT NOT NULL,
-> main_id INT ,
-> PRIMARY KEY(id),
-> CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main2(id)
ERROR 1005 (HY000): Can"t create table "test.test_sub2" (errno: 150)
-- 子表, 資料型別 int unsigned 的時候
-> main_id INT unsigned,
Query OK, 0 rows affected (0.02 sec)
資料型別不一致。
你的主表, id 的資料型別是 int unsigned
而你的子表, hoyyb_id 資料型別是 int
因為:
INT[(M)] [UNSIGNED] [ZEROFILL]
普通大小的整數。帶符號的範圍是-2147483648到2147483647。無符號的範圍是0到4294967295。
2種解決辦法
1、 主表資料型別, 修改為 int
2、子表資料型別, 修改為 int unsigned
下面是一個模擬的例子:
-- 主表, id 是 INT unsigned
mysql> CREATE TABLE test_main2 (
-> id INT unsigned NOT NULL,
-> value VARCHAR(10),
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected (0.01 sec)
-- 子表, 資料型別 int 的時候。
mysql> CREATE TABLE test_sub2 (
-> id INT NOT NULL,
-> main_id INT ,
-> value VARCHAR(10),
-> PRIMARY KEY(id),
-> CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main2(id)
-> );
ERROR 1005 (HY000): Can"t create table "test.test_sub2" (errno: 150)
-- 子表, 資料型別 int unsigned 的時候
mysql> CREATE TABLE test_sub2 (
-> id INT NOT NULL,
-> main_id INT unsigned,
-> value VARCHAR(10),
-> PRIMARY KEY(id),
-> CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main2(id)
-> );
Query OK, 0 rows affected (0.02 sec)