我正在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
,但出现了不同得错误: - 错误1452,当我尝试将
UNSIGNED
添加到应该引用外键列中BIGINT
时
包含创建的文件的一部分:
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 add constraint foreign key的语法来解决这个问题,并一直在搜索解决方案,但没有找到解决方案。最有可能的是引用外键的列应该是索引,或者多个错误,但我不知道我应该在代码中改变什么。
2条答案
按热度按时间rsl1atfo1#
谢谢大家的回答,我在BIGINT中添加了UNSIGNED,但这不是我的问题的主要来源。问题是我从主键值从0开始的文件导入数据。Here我发现在MariaDB/MySQL中,如果主键值为0,它将自动分配第一个值。它将0,1,2更改为1,1,2,然后出现错误。有两个选项:
6kkfgxo02#
语法错误,请使用