2

我正在尝试创建两个具有一对多关系的表。以下是它们的模式:

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_keyon之间添加外键关系时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 参考手册,但我已经满足了那里的所有要求。我该如何缓解这个问题?

4

1 回答 1

3

一个问题是字段太大。 InnoDB 每个键的字段限制为 768 字节,正在创建的外键约为 8KB。此外,不可能确保外键是唯一的。

缓解这种情况的两个选项 - 您可以将 VARCHAR 字段的大小减少到小于 768 字节,或者id改为索引这两个字段。

ALTER TABLE property_value
    ADD CONSTRAINT fk_property_key_id FOREIGN KEY (property_key_id)
    REFERENCES property_key(id);
于 2012-08-14T23:20:03.183 回答