SQL 语法错误 (MYSQL 5.0)

Posted

技术标签:

【中文标题】SQL 语法错误 (MYSQL 5.0)【英文标题】:Error in SQL Syntax (MYSQL 5.0) 【发布时间】:2012-01-30 01:32:41 【问题描述】:

有人知道这个 mysql 5.0 语法有什么问题吗?

CREATE TABLE IF NOT EXISTS target (
  _id int(11) NOT NULL AUTO_INCREMENT,
  time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  map_id int(11) DEFAULT NULL,
  left int(11) DEFAULT NULL,
  top int(11) DEFAULT NULL,
  status tinyint(1) NOT NULL,
  temperature int(11) DEFAULT NULL,
  humidity float DEFAULT NULL,
  lum int(11) DEFAULT NULL,
  PRIMARY KEY (_id),
  FOREIGN KEY (map_id) REFERENCES map(id) ON DELETE CASCADE
)

我会告诉你错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'left INTEGER DEFAULT NULL 附近使用的正确语法, 顶部整数默认空值, 第 5 行的状态 tinyint(1) NOT'

【问题讨论】:

How can I write SQL for a table that shares the same name as a protected keyword in MySql? 的可能重复项 【参考方案1】:

因为left 是MySQL 5.0 reserved word。此外,即使您可以转义字段名称,在表定义中使用保留字也不是一个好主意。

【讨论】:

【参考方案2】:

你必须这样写:

CREATE TABLE IF NOT EXISTS target (
  _id int(11) NOT NULL AUTO_INCREMENT,
  time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  map_id int(11) DEFAULT NULL,
  `left` int(11) DEFAULT NULL,
  top int(11) DEFAULT NULL,
  status tinyint(1) NOT NULL,
  temperature int(11) DEFAULT NULL,
  humidity float DEFAULT NULL,
  lum int(11) DEFAULT NULL,
  PRIMARY KEY (_id),
  FOREIGN KEY (map_id) REFERENCES map(id) ON DELETE CASCADE
)

查看左行中的 ``(反引号)字符!

【讨论】:

【参考方案3】:

您使用保留字作为字段名称。你可以这样做,但是你必须正确地逃避它们,就像这样:

CREATE TABLE IF NOT EXISTS target (
  `_id` int(11) NOT NULL AUTO_INCREMENT,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `map_id` int(11) DEFAULT NULL,
  `left` int(11) DEFAULT NULL,
  `top` int(11) DEFAULT NULL,
  `status` tinyint(1) NOT NULL,
  `temperature` int(11) DEFAULT NULL,
  `humidity` decimal(13,2) DEFAULT NULL,
  `lum` int(11) DEFAULT NULL,
  PRIMARY KEY (_id),
  FOREIGN KEY (map_id) REFERENCES map(id) ON DELETE CASCADE
)

我的建议是避免保留名称。

【讨论】:

以上是关于SQL 语法错误 (MYSQL 5.0)的主要内容,如果未能解决你的问题,请参考以下文章

语法错误或访问冲突:1064 您的 SQL 语法有错误;对应于正确语法的 MySQL 服务器版本

MySQL #1064 - 您的 SQL 语法 2020 有错误 [重复]

SQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用

Liquibase:MySQL 存储过程中的 SQL 语法错误

“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法错误”Hibernate 4 [重复]