代码之家  ›  专栏  ›  技术社区  ›  rapt

HSQLDB:替换为

  •  1
  • rapt  · 技术社区  · 8 年前

    发件人:

    HyperSQL用户指南

    HyperSQL数据库引擎2.4.0

    Chapter 12. Compatibility With Other DBMS :

    HyperSQL支持并转换插入、忽略、替换和打开 将INSERT的密钥更新变体复制到可预测和 无错误操作。

    使用INSERT IGNORE时,如果插入的任何行 主键或唯一约束,则不会插入该行。其余的 只有在没有其他冲突的情况下,才会插入 如果长字符串或类型不匹配,则相应的错误为 返回。

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

    但是当我尝试

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

    我明白了

    unexpected token: REPLACE required: INSERT
    

    为什么会这样?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Tim Biegeleisen    8 年前

    我建议您需要启用MySQL兼容模式,以便获得MySQL特定的命令,如 REPLACE 工作。来自HSQL第7章 documentation :

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

    这里的关键是需要打开it MySQL语法兼容模式。遵循 link to Chapter 12 您在问题中发布的内容我们发现:

    使用SET DATABASE SQL语法MYS TRUE或等效的URL属性SQL。syntax\u mys=true以支持自动增量和文本数据类型以及其他几种类型。这些类型定义被转换为HyperSQL等价物。

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

    SET DATABASE SQL SYNTAX MYS TRUE
    

    另一种可能用于开发目的的方法是将以下内容添加到连接字符串中:

    sql.syntax_mys=true
    

    一旦启用了MySQL兼容模式, 更换 应能正常工作。