【问题标题】:HSQLDB: REPLACE INTOHSQLDB:替换为
【发布时间】:2018-06-01 10:03:25
【问题描述】:

发件人:

HyperSQL 用户指南

HyperSQL 数据库引擎 2.4.0

Chapter 12. Compatibility With Other DBMS

HyperSQL 支持并翻译 INSERT IGNORE、REPLACE 和 ON 将 INSERT 的 DUPLICATE KEY UPDATE 变体转换为可预测和 无错误操作。

当使用 INSERT IGNORE 时,如果任何插入的行会违反 PRIMARY KEY 或 UNIQUE 约束,不插入该行。其余的部分 只有在没有其他违规行为的情况下才插入行的 长字符串或类型不匹配,否则相应的错误是 返回。

当使用 REPLACE 或 ON DUPLICATE KEY UPDATE 时,需要的行 替换或更新使用给定值更新。这有效 与这些行的 UPDATE 语句完全相同。参考 强制执行和更新约束和其他完整性检查 触发器被激活。返回的行数就是总数 插入和更新的行数。

但是当我尝试时

REPLACE INTO my_table (my_id, my_int) VALUES (1, 2);

我明白了

unexpected token: REPLACE required: INSERT

这是为什么呢?

【问题讨论】:

    标签: mysql sql hsqldb


    【解决方案1】:

    我建议您需要启用 MySQL 兼容模式才能使特定于 MySQL 的命令(如 REPLACE)正常工作。来自HSQL的第7章documentation

    在 MySQL 语法兼容模式下,HyperSQL 支持 INSERT 语句的 INSERT IGNORE、REPLACE 和 ON DUPLICATE KEY UPDATE 变体。

    这里的重点是需要开启MySQL语法兼容模式。根据您在问题中发布的link to Chapter 12,我们发现:

    使用 SET DATABASE SQL SYNTAX MYS TRUE 或等效的 URL 属性 sql.syntax_mys=true 来启用对 AUTO_INCREMENT 和 TEXT 数据类型以及其他几种类型的支持。这些类型定义被翻译成 HyperSQL 等价物。

    因此文档为我们提供了两种启用 MySQL 兼容模式的方法。我们可以直接从 HSQL 控制台执行:

    SET DATABASE SQL SYNTAX MYS TRUE
    

    另一个,可能是用于开发目的,是在连接字符串中添加以下内容:

    sql.syntax_mys=true
    

    启用 MySQL 兼容模式后,REPLACE 应该可以正常工作。

    【讨论】:

    • 你是对的。我忽略了这一段。谢谢。
    猜你喜欢
    • 2015-11-18
    • 2011-07-06
    • 1970-01-01
    • 2016-09-03
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2015-01-14
    相关资源
    最近更新 更多