VSCode SQLTools 对于非关键字作为关键字(如位置、名称、密码等)给出了不必要的错误。
DROP DATABASE IF EXISTS VolleyDB;
CREATE DATABASE VolleyDB;
USE VolleyDB;
CREATE TABLE Player
(
username VARCHAR(512),
password VARCHAR(512),
name VARCHAR(512),
surname VARCHAR(512),
date_of_birth VARCHAR(512),
height INT,
weight INT,
PRIMARY KEY (username)
);
CREATE TABLE PlayerPositions
(
player_positions_id INT,
username VARCHAR(512),
position INT,
PRIMARY KEY (player_positions_id)
);
CREATE TABLE PlayerTeams
(
player_teams_id INT,
username VARCHAR(512),
team INT,
PRIMARY KEY (player_teams_id)
);
CREATE TABLE Team
(
team_ID INT,
team_name VARCHAR(512),
coach_username VARCHAR(512),
contract_start VARCHAR(512),
contract_finish VARCHAR(512),
channel_ID INT,
channel_name VARCHAR(512),
PRIMARY KEY (team_ID)
);
CREATE TABLE Coach
(
username VARCHAR(512),
password VARCHAR(512),
name VARCHAR(512),
surname VARCHAR(512),
nationality VARCHAR(512),
PRIMARY KEY (username)
);
CREATE TABLE Position
(
position_ID INT,
position_name VARCHAR(512),
PRIMARY KEY (position_ID)
);
CREATE TABLE Jury
(
username VARCHAR(512),
password VARCHAR(512),
name VARCHAR(512),
surname VARCHAR(512),
nationality VARCHAR(512),
PRIMARY KEY (username)
);
CREATE TABLE MatchSession
(
session_ID INT,
team_ID INT,
stadium_ID INT,
stadium_name VARCHAR(512),
stadium_country VARCHAR(512),
time_slot INT,
date VARCHAR(512),
assigned_jury_username VARCHAR(512),
rating DOUBLE,
PRIMARY KEY (session_ID)
);
CREATE TABLE SessionSquads
(
squad_ID INT,
session_ID INT,
played_player_username VARCHAR(512),
position_ID INT,
PRIMARY KEY (squad_ID)
);
这给出了一个错误
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在“Position”附近使用的正确语法 ( 位置 ID INT, 位置名称 VARCHAR(512), 主键’位于第 1 行”
我使用 SQLTools 进行了测试,然后在
mysql
命令行客户端中测试了相同的代码。它在命令行客户端中工作,但我得到了与 SQLTools 中相同的错误。
我在 SQLTools 和客户端中运行
SELECT @@sql_mode;
进行比较:
SQL工具:
IGNORE_SPACE、ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_ENGINE_SUBSTITUTION
mysql:
ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_ENGINE_SUBSTITUTION
似乎 SQLTools 由于某种原因在 SQL 模式中添加了
IGNORE_SPACE
。
这样做的效果是,
POSITION (...)
与POSITION(...)
解释相同,这意味着它与内置函数POSITION()
冲突。
您可以通过将表名称放在反引号中来解决此问题。这允许您使用任何保留关键字作为标识符,以及与内置函数冲突的单词。
CREATE TABLE `Position`
(
position_ID INT,
position_name VARCHAR(512),
PRIMARY KEY (position_ID)
);
可能有一种方法可以覆盖 MySQL SQLTools 驱动程序的 SQL 模式,但我不知道。