无法将外键添加到 table MariaDB/MySQL

Can't add foreign key to table MariaDB/MySQL

我正在为 TPC-H 基准测试在 MariaDB 10.6 数据库中创建 tables。 CREATE TABLE 工作正常,但添加 FOREIGN KEY 失败。 我尝试关注 mariadbtutorial and documentation,但这也不起作用。

我怀疑:

发生的错误:

包含创建的部分文件:

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 的语法来解决这个问题,昨天一直在搜索解决方案,但没有找到解决方案。 最有可能的是引用外键的列应该是索引,或者多个错误, 但我不知道我的代码应该更改什么。

语法错误,使用这个

ALTER TABLE NATION 添加约束 NATION_FK 外键 (N_REGIONKEY) 引用区域 (R_REGIONKEY);

感谢所有回答, 我将 UNSIGNED 添加到 BIGINT,但这不是我问题的主要来源。 问题是我从主键值从 0 开始的文件中导入数据。 Here 我发现在 MariaDB/MySQL 中如果为主键指定 0,它会自动分配第一个值。它变了 0、1、2 到 1、1、2 并发生错误。 有两个选项:

  • 更改 dbgen 的设置(程序为 TPC-H 基准生成数据)。 可能的选项有:INFORMIX、DB2、TDAT (Teradata)、SQLSERVER、SYBASE、ORACLE、VECTORWISE。选项代表数据库语法,没有 MYSQL 选项。 dbgen 创建“|”包含此表记录的分隔文件 (.tbl)。 我使用 ORACLE,它生成的文件的主键从 0 开始。 如果您知道哪个选项最类似于 MySQL 语法并且包含从 0 开始的键,您可以发表评论。
  • 或者有什么自动软件可以将这个文件中的主键加1。尽管 NATION 和 REGION 表不是那么大 (20, 5),但其他一些表(为了清楚起见我从这个问题中删除了)将有超过 100 000 条记录。