我在MySql DB上有这个 USER 表:
id bigint(20) unsigned NO PRI NULL auto_increment
username varchar(30) NO NULL
pswd varchar(40) NO NULL
然后我尝试创建一个新的 ACCOMODATION 表,其中包含 user_Id 字段,该字段是上一个 USER 表的外键,I我正在这样做:
CREATE
TABLE testdb.ACCOMODATION
(
Id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
user_Id BIGINT(20) NOT NULL,
name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL,
tel VARCHAR(20) NOT NULL,
mobile VARCHAR(20) NOT NULL,
fax VARCHAR(20) NOT NULL,
email VARCHAR(80) NOT NULL,
cap VARCHAR(20) NOT NULL,
nation VARCHAR(20) NOT NULL,
region VARCHAR(20) NOT NULL,
province VARCHAR(20) NOT NULL,
municipality VARCHAR(20) NOT NULL,
stars ENUM('ONE', 'TWO', 'THREE', 'FOUR', 'FIVE') NOT NULL,
lat BIGINT NOT NULL,
lon BIGINT NOT NULL,
CONSTRAINT fk_accomodation_user FOREIGN KEY (user_Id) REFERENCES testdb.user (Id),
PRIMARY KEY (Id)
)
ENGINE=InnoDB DEFAULT CHARSET=latin1
但是我收到以下错误消息:
#1005 - 无法创建表
testdb
。accomodation
(错误:150“外键约束形成错误”)
为什么呢?怎么了?我错过了什么?如何解决这个问题呢?
TNX
答案 0 :(得分:1)
这些定义不一样:
id bigint(20) unsigned NO PRI NULL auto_increment
user_Id BIGINT(20) NOT NULL
未签名的bigint
与已签名的bigint
不同。外键引用中使用的列需要与原始表中的列完全相同。
答案 1 :(得分:1)
ACCOMODATION表中user_id列的数据类型必须与用户表中id列的数据类型完全相同。
user_id bigint(20)unsigned NO NULL