[按照以下顺序运行以下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语句:
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) VISIBLE,
CONSTRAINT `playerid`
FOREIGN KEY (`playerid`) REFERENCES `st_player` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION
);
您可能正在运行不支持不可见索引功能的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
);