在我的桌子上加一个外键有困难。
CREATE TABLE event (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
issued DATETIME NOT NULL,
user VARCHAR(255) NOT NULL,
subject VARCHAR(255) NOT NULL,
attending BIGINT(255) NOT NULL,
attendees VARCHAR(255) NOT NULL,
organisers VARCHAR(255) NOT NULL,
place BIGINT(20) NOT NULL,
started DATETIME NOT NULL,
stopped DATETIME NOT NULL,
content LONGTEXT NOT NULL,
broadcasting TINYINT NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (place)
REFERENCES place (id),
FOREIGN KEY (user)
REFERENCES user (username)
)place的外键执行得很好,但是一旦尝试将用户添加为外键,我就会得到相同的错误:
错误代码: 1005。无法创建表“iservices.event”(errno: 150)
有人能帮忙吗?
用户表图片:用户表
位置表图片:放置表
在MySQL工作台中是否存在扩展错误的问题?
发布于 2017-02-24 13:28:45
外键必须是独一无二,所以要使用户名惟一(这可能不是最好的主意),或者选择与用户id不同的东西。
我的建议是:向用户表中添加一个主自动增量键,并将其用作外键。
发布于 2017-02-24 13:35:40
发布于 2017-02-24 13:36:44
请确保存在user表和place表,并将相应的列设置为primary key。下面的狙击手工作正常:
CREATE TABLE user(username VARCHAR(255) PRIMARY KEY);
CREATE TABLE place(id BIGINT(20) PRIMARY KEY);
CREATE TABLE event (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
issued DATETIME NOT NULL,
user VARCHAR(255) NOT NULL,
subject VARCHAR(255) NOT NULL,
attending BIGINT(255) NOT NULL,
attendees VARCHAR(255) NOT NULL,
organisers VARCHAR(255) NOT NULL,
place BIGINT(20) NOT NULL,
started DATETIME NOT NULL,
stopped DATETIME NOT NULL,
content LONGTEXT NOT NULL,
broadcasting TINYINT NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (place)
REFERENCES place (id),
FOREIGN KEY (user)
REFERENCES user (username)
)这是SQL Fiddle。
https://stackoverflow.com/questions/42439687
复制相似问题