【问题标题】:Why does this SQL INSERT statement return a syntax error?为什么此 SQL INSERT 语句会返回语法错误?
【发布时间】:2009-05-26 20:10:55
【问题描述】:

好的,我有一个非常简单的 mysql 数据库,但是当我尝试通过 mysql-admin 运行此查询时,我得到了奇怪的错误

插入自定义报告(研究, 类型、模式、选择、描述) 值('1'、'2'、'3'、'4'、'5');

错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'select, description) VALUES ('1', '2', '3', '4', '5')' 附近使用正确的语法

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您遇到问题是因为您使用 SQL 保留字作为列名而不是转义它们。试试这样:

    INSERT INTO `customreports`
    (`study`, `type`, `mode`, `select`, `description`)
    VALUES
    ('1', '2', '3', '4', '5');
    

    【讨论】:

    • +1 这是正确的答案,但我肯定会将字段名称更改为非保留字。在对象名称中使用保留字会给您和您之后的每个人带来麻烦。
    • 这确实是正确答案。但是,我不建议仅仅为了不使用保留字而更改列名,最好的做法是转义所有标识符,这将为您省去很多麻烦。虽然我必须承认,“选择”作为列名有点过头了。
    【解决方案2】:

    是的,我会改写为:

    INSERT INTO [customreports] ([study], [type], [mode], [select], [description]) VALUES ('1', '2', '3', '4', '5' );

    【讨论】:

      【解决方案3】:

      只是猜测,但保留字“select”(列为列名)是否会导致问题?

      【讨论】:

      • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
      • @il_guru,看看选择的答案然后我的,注意到有什么相似之处吗?
      【解决方案4】:

      “SELECT”是 SQL 中的保留字...使用与“select”不同的字

      【讨论】:

        【解决方案5】:

        “select”这个词在 sql 中是保留的。解释器认为您正在尝试在 INSERT INTO 语句中使用 SELECT 语句。您需要将字段名称括起来,以便解释器不会将它们作为命令读取。

        MySQL 更新:

        insert into customreports ('study','type','mode','select','description') values...
        

        【讨论】:

          【解决方案6】:

          正确每个混乱...但要记住的关键是您应该尽最大努力不要使用保留字作为表中的列名...例如 SELECT 和 TYPE.... 不是其他三个的正面,但这就是你的冲突所在。是的,通过明确地在字段周围加上引号将告诉 SQL 您指的是其中的字段,但最好知道它为什么会失败,而不仅仅是解决方法...有助于防止将来出现类似问题。

          【讨论】:

            【解决方案7】:

            同上,但我相信您需要在列名周围加上双引号,而不是单引号。也许某些风格的 SQL 会正确处理单引号,但我认为标准规定字段名称为双引号,字段值为单引号。

            【讨论】:

            • 不,这是 mysql,mysql 接受反引号作为标识符转义字符。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-28
            • 2013-11-09
            • 1970-01-01
            • 2017-09-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多