【发布时间】:2022-01-26 08:44:30
【问题描述】:
我正在 MariaDB 10.6 数据库中为 TPC-H 基准测试创建表。
CREATE TABLE 工作正常,但添加 FOREIGN KEY 失败。
我尝试关注mariadbtutorial 和documentation,但这也不起作用。
我怀疑:
-
FOREIGN KEY的语法错误 - 引用外键的列中的数据类型错误。
- 引用外键的列应该是索引
- dbgen 从 TPC-H 基准生成的数据有问题。
发生的错误:
-
警告 150:使用外键 (N_REGIONKEY) 约束更改表
bazatest2.nation失败。列“N_REGIONKEY”的字段类型或字符集与引用的列“R_REGIONKEY”不匹配。 尝试将BIGINT NOT NULL更改为BIGINT UNSIGNED NOT NULL但出现不同的错误: -
当我尝试在应该引用外键的列中将
UNSIGNED添加到BIGINT时出现错误 1452。
包含创建的部分文件:
DROP TABLE IF EXISTS NATION CASCADE;
CREATE TABLE NATION (
N_NATIONKEY SERIAL PRIMARY KEY,
N_NAME CHAR(25),
N_REGIONKEY BIGINT UNSIGNED NOT NULL, -- references R_REGIONKEY
N_COMMENT VARCHAR(152)
);
DROP TABLE IF EXISTS REGION CASCADE;
CREATE TABLE REGION (
R_REGIONKEY SERIAL PRIMARY KEY,
R_NAME CHAR(25),
R_COMMENT VARCHAR(152)
);
具有外键约束的文件部分:
ALTER TABLE NATION ADD CONSTRAINT FOREIGN KEY (N_REGIONKEY) REFERENCES REGION(R_REGIONKEY);
我昨天尝试通过更改 alter table 添加约束外键的语法并搜索解决方案来解决这个问题,但没有找到解决方案。 最有可能是引用外键的列应该是索引,或者多个错误, 但我不知道我应该在我的代码中更改什么。
【问题讨论】:
-
助您一臂之力,化繁为简! IE。删除所有不需要重现问题的表/列/fk。
-
@jarlh 重现问题(7 个中的 1 个,但它们是相同的)您只需要创建表国家、创建表区域和最后一个更改表。
-
既然您知道需要什么,您可以从问题中删除其余内容。
-
@WojciechCode SERIAL 中的问题是 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE 的别名。将数据类型更改为 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT。
-
未转载。 dbfiddle.uk/…
标签: mysql sql database mariadb benchmarking