MariaDB - не может создать таблицу с двумя внешними ключами - PullRequest
0 голосов
/ 02 января 2019

У меня следующий запрос:

create table bans
(
    id int auto_increment primary key ,
    reason int not null,
    player int not null,
    server int not null,
    starts timestamp default current_timestamp not null,
    ends DATETIME not null,
    constraint bans__fk_player
        foreign key (player) references players ('id'),
    constraint bans__fk_server
        foreign key (server) references servers ('id')
);

Что приводит к:

[2019-01-02 18:35:29] [42000][1064] (conn=75) 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 ''id'),
[2019-01-02 18:35:29] [42000][1064] 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 ''id'),

Я просто хочу установить соотношение 1: n между:

players.id -> bans.player и назовите его bans__fk_player

servers.id -> bans.server и назовите его bans__fk_server

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Если вы хотите заключить в кавычки столбец id, в MariaDB (также в MySQL) вы должны использовать «обратные тики», как в:

create table bans
(
    id int auto_increment primary key ,
    reason int not null,
    player int not null,
    server int not null,
    starts timestamp default current_timestamp not null,
    ends DATETIME not null,
    constraint bans__fk_player
        foreign key (player) references players (`id`),
    constraint bans__fk_server
        foreign key (server) references servers (`id`)
);
0 голосов
/ 02 января 2019

1) Это уже прокомментировали SO: вам нужно удалить кавычки вокруг ваших идентификаторов в определении внешних ключей.Также см. этот пост SO для общего обсуждения использования кавычек в mysql / MariaDB.

2) Другая проблема заключается в том, что вы не определяете ограничение правильно, в нем отсутствует имя дляиностранный ключ.Синтаксис следующий, как объяснено в этом mysql turorial :

CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name (columns)
REFERENCES parent_table(columns)

Таким образом, ваш код должен быть:

...
constraint bans__player
    foreign key bans__fk_player (player) references players (id),
constraint bans__server
    foreign key bans__fk_server (server) references servers (id)
...

См. эту дб скрипку.

Это также должно работать и приводить к более короткому синтаксису (вам, вероятно, не нужно явно называть ограничения):

...
foreign key bans__fk_player (player) references players (id),
foreign key bans__fk_server (server) references servers (id)
...

Если вы все еще испытываете ошибкиЗатем вы должны посмотреть на определение ссылочных таблиц (серверов и игроков).В обеих таблицах идентификатор должен быть либо первичным ключом таблицы, либо должен контролироваться уникальным ограничением.И, конечно, он должен быть числовым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...