MariaDB创建表在外键约束上引发错误

问题描述 投票:0回答:1

[按照以下顺序运行以下SQL语句会导致引发以下错误,我不知道出了什么问题,在Google中搜索了一些查询,这些查询对我来说似乎都是一样的。当在MySQL Workbench服务器上执行时,它们工作正常,但是当我在MariaDb服务器上尝试时,它们却无法正常工作。

错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' CONSTRAINT `playerid` FOREIGN KEY (playerid) REFERENCES st_player (id) ON DELET' at line 1

SQL语句:

  1. CREATE TABLE IF NOT EXISTS `st_player` ( `id` VARCHAR(45) NOT NULL, `playerName` VARCHAR(45) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) );
  2. CREATE TABLE IF NOT EXISTS `st_statistic` ( `criteria` VARCHAR(45) NOT NULL, `subcriteria` VARCHAR(45) NOT NULL, `playerid` VARCHAR(45) NOT NULL, `displayname` VARCHAR(45) NULL, `amount` INT NULL, PRIMARY KEY (`criteria`, `subcriteria`, `playerid`), INDEX `playerid_idx` (`playerid` ASC) VISIBLE, CONSTRAINT `playerid` FOREIGN KEY (`playerid`) REFERENCES `st_player` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION );
mysql foreign-keys mariadb constraints create-table
1个回答
0
投票

您可能正在运行不支持不可见索引功能的MySQL版本。无论如何,VISIBLE是默认行为,因此您可以将其从create table语句中删除。

此外,MySQL自动在外键列上创建索引;这意味着您实际上不需要显式声明该索引。因此,我建议只删除索引声明。

此代码运行正常:

CREATE TABLE IF NOT EXISTS st_player(
    id VARCHAR(45) NOT NULL,
    playerName VARCHAR(45) NOT NULL, 
    PRIMARY KEY (id)
    -- UNIQUE KEY id(id)
);

CREATE TABLE IF NOT EXISTS st_statistic(
    criteria VARCHAR(45) NOT NULL,
    subcriteria VARCHAR(45) NOT NULL,
    playerid VARCHAR(45) NOT NULL,
    displayname VARCHAR(45) NULL,
    amount INT NULL, 
    PRIMARY KEY (criteria,subcriteria,playerid), 
    -- INDEX playerid_idx(playerid ASC), -- unnecessary (but it it is OK if you uncomment it)
    CONSTRAINT playerid
        FOREIGN KEY (playerid) REFERENCES st_player(id) 
        ON DELETE CASCADE 
        ON UPDATE NO ACTION
);
© www.soinside.com 2019 - 2024. All rights reserved.