尝试添加外键关系时mysql中的外键约束
我得到了两个名为activity和user的表。我需要与这两个表建立外键关系。username是我的user表的主键,它是一个varchar值。但是当我尝试建立关系时,我得到一个外键约束错误,错误代码为1215。下面是与我提到的两个表相关的DDL语句 谁能帮我解决这个问题 谢谢尝试添加外键关系时mysql中的外键约束,mysql,sql,foreign-keys,foreign-key-relationship,Mysql,Sql,Foreign Keys,Foreign Key Relationship,我得到了两个名为activity和user的表。我需要与这两个表建立外键关系。username是我的user表的主键,它是一个varchar值。但是当我尝试建立关系时,我得到一个外键约束错误,错误代码为1215。下面是与我提到的两个表相关的DDL语句 谁能帮我解决这个问题 谢谢 CREATE TABLE `user` ( `username` varchar(50) NOT NULL, `user_id` int(11) DEFAULT NULL, `email` varchar(5
CREATE TABLE `user` (
`username` varchar(50) NOT NULL,
`user_id` int(11) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
`password` varchar(500) DEFAULT NULL,
`activated` tinyint(1) DEFAULT '0',
`activationkey` varchar(50) DEFAULT NULL,
`resetpasswordkey` varchar(50) DEFAULT NULL,
PRIMARY KEY (`username`),
UNIQUE KEY `user_id_UNIQUE` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE activity (
activity_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
activity_type_id INT UNSIGNED,
activity_property_id INT UNSIGNED,
added_by varchar(50),
updated_by varchar(50),
activity_code VARCHAR(50),
activity_description VARCHAR(100),
start_date TIMESTAMP NULL,
end_date TIMESTAMP NULL,
start_time VARCHAR(10),
end_time VARCHAR(10),
added_date TIMESTAMP NULL,
updated_date TIMESTAMP NULL,
is_available TINYINT(1),
PRIMARY KEY (activity_id),
CONSTRAINT fk_ADDED_BY_FOR_ACTIVITY FOREIGN KEY (added_by) REFERENCES user (username),
CONSTRAINT fk_UPDATED_BY_FOR_ACTIVITY FOREIGN KEY (updated_by) REFERENCES user (username)
)
ENGINE = InnoDB;
只需添加默认字符集=1。尝试下面的查询
CREATE TABLE activity (
activity_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
activity_type_id INT UNSIGNED,
activity_property_id INT UNSIGNED,
added_by VARCHAR(50) DEFAULT NULL,
updated_by VARCHAR(50) DEFAULT NULL,
activity_code VARCHAR(50),
activity_description VARCHAR(100),
start_date TIMESTAMP NULL,
end_date TIMESTAMP NULL,
start_time VARCHAR(10),
end_time VARCHAR(10),
added_date TIMESTAMP NULL,
updated_date TIMESTAMP NULL,
is_available TINYINT(1),
PRIMARY KEY (activity_id),
CONSTRAINT fk_ADDED_BY_FOR_ACTIVITY FOREIGN KEY (added_by) REFERENCES user (username),
CONSTRAINT fk_UPDATED_BY_FOR_ACTIVITY FOREIGN KEY (updated_by) REFERENCES user (username)
)
ENGINE = InnoDB DEFAULT CHARSET=latin1;
只需添加默认字符集=1。尝试下面的查询
CREATE TABLE activity (
activity_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
activity_type_id INT UNSIGNED,
activity_property_id INT UNSIGNED,
added_by VARCHAR(50) DEFAULT NULL,
updated_by VARCHAR(50) DEFAULT NULL,
activity_code VARCHAR(50),
activity_description VARCHAR(100),
start_date TIMESTAMP NULL,
end_date TIMESTAMP NULL,
start_time VARCHAR(10),
end_time VARCHAR(10),
added_date TIMESTAMP NULL,
updated_date TIMESTAMP NULL,
is_available TINYINT(1),
PRIMARY KEY (activity_id),
CONSTRAINT fk_ADDED_BY_FOR_ACTIVITY FOREIGN KEY (added_by) REFERENCES user (username),
CONSTRAINT fk_UPDATED_BY_FOR_ACTIVITY FOREIGN KEY (updated_by) REFERENCES user (username)
)
ENGINE = InnoDB DEFAULT CHARSET=latin1;
您的错误是FK列类型与PK列类型不匹配。特别是,字符集不同。阅读有关外键的文档部分 外键和引用键中的相应列必须具有相似的数据类型。整数类型的大小和符号必须相同。字符串类型的长度不必相同。对于非二进制字符串列,字符集和排序规则必须相同。 所以活动需要 你还会发现 除了显示错误外,如果MySQL服务器中出现涉及InnoDB表的外键错误(通常为错误150),您可以通过检查SHOW ENGINE InnoDB STATUS的输出来获得最新InnoDB外键错误的详细说明
您的错误是FK列类型与PK列类型不匹配。特别是,字符集不同。阅读有关外键的文档部分 外键和引用键中的相应列必须具有相似的数据类型。整数类型的大小和符号必须相同。字符串类型的长度不必相同。对于非二进制字符串列,字符集和排序规则必须相同。 所以活动需要 你还会发现 除了显示错误外,如果MySQL服务器中出现涉及InnoDB表的外键错误(通常为错误150),您可以通过检查SHOW ENGINE InnoDB STATUS的输出来获得最新InnoDB外键错误的详细说明 请阅读并付诸行动。请阅读并付诸行动。