VSCode SQLTools误将非关键字识别为关键字引发SQL语法错误
解决VSCode SQLTools误识别关键字导致MySQL建表语法错误的问题
问题场景
使用VSCode SQLTools编写MySQL建表脚本时,工具误将position、name、password等字段/表名识别为关键字,执行脚本时触发语法错误,核心错误提示:
您的SQL语法存在错误;请查阅与您的MySQL服务器版本对应的手册,了解在'Position
(
position_ID INT,
position_name VARCHAR(512),
PRIMARY KEY '附近使用的正确语法
核心原因
MySQL中POSITION属于保留关键字(是字符串匹配函数POSITION()的名称),直接作为表名使用会触发语法错误;而name、password虽非官方保留关键字,但VSCode SQLTools的语法检测规则可能误将其标记为关键字,导致执行异常。
修复方案
将所有被误识别或本身属于保留关键字的表名、列名用**反引号(`)**包裹,明确告知MySQL这是标识符而非关键字。
修复后的完整SQL脚本
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`) );
内容的提问来源于stack exchange,提问作者sirbird phoenix
相关产品推荐
相关产品推荐

