我正在尝试创建两个具有一对多关系的表。以下是两者的模式:
CREATE TABLE property_key (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
property VARCHAR(4000)
);
CREATE TABLE property_value (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
prop_key VARCHAR(4000),
prop_value VARCHAR(4000),
lang VARCHAR(2),
INDEX ix_land(lang)
);
当我尝试在property_value
上的property_key
和prop_key
之间添加外键关系时,我收到一个奇怪的错误:
[ALTER - 0 row(s), 0.000 secs] [Error Code: 1005, SQL State: HY000] Can't create table 'test.#sql-a8_6' (errno: 150)
我正在使用的ALTER语法是:
ALTER TABLE property_value ADD CONSTRAINT fk_prop_key FOREIGN KEY (prop_key) REFERENCES property_key(property);
我就此问题咨询了MySQL Reference Manual,但我满足了那里的所有要求。如何缓解此问题?
答案 0 :(得分:3)
一个问题是字段太大。 InnoDB has a field limit of 768 bytes per key,正在创建的外键大约为8KB。此外,不可能确保外键是唯一的。
缓解此问题的两个选项 - 您可以将VARCHAR字段的大小减小到768字节以下,或者改为索引两个id
字段。
ALTER TABLE property_value
ADD CONSTRAINT fk_property_key_id FOREIGN KEY (property_key_id)
REFERENCES property_key(id);