Возможно, вы используете версию 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
);
Также обратите внимание, что вам не нужен индекс unique
для столбца первичного ключа Первый стол Первичный ключ уже уникален. Я тоже это прокомментировал.