"如果不存在则插入"在MySQL和HSQLDB中

时间:2015-05-30 15:15:55

标签: mysql hsqldb

MySQL和HSQLDB是否支持SQL语句(或语句的原子序列),如果它们已经存在,则插入值?

我正在开发一个使用MySQL作为生产数据库和HSQLDB进行单元测试的应用程序;我希望在表格为空时进行单个"初始数据导入"脚本。

MySQL支持INSERT IGNOREREPLACE INTOINSERT INTO ... ON DUPLICATE KEY UPDATE ...,但HSQLDB不支持;相反,HSQLDB支持MERGE,但MySQL不支持。

2 个答案:

答案 0 :(得分:1)

查看已接受的答案here,如果您不想使用其他脚本预处理脚本,我认为这是唯一的方法。

答案 1 :(得分:1)

2.3.4版的HSQLDb添加了对insert ignore的支持。

http://hsqldb.org/

版本2.3.4为列添加了UUID类型,为表添加了SYNONYM, 函数,PERIOD谓词和自动更新的TIMESTAMP列 行更新。其他新功能包括取消功能 JDBC和管理会话中的长期运行语句,以及 除8位文本外,UTF-16文件还支持文本表源 文件。 MySQL对REPLACE,INSERT IGNORE和ON的兼容性 DUPLICATE KEY UPDATE语句

http://hsqldb.org/doc/guide/guide.pdf(第260页)。

HyperSQL支持并转换INSERT IGNORE,REPLACE和ON INSERT的双重密钥更新变体为可预测的 无错误的操作。使用INSERT IGNORE时,如果有 插入的行将违反PRIMARY KEY或UNIQUE约束,即 未插入行。对于多行插入,其余行是 然后仅在没有其他违规(例如长字符串)的情况下才插入 或键入不匹配,否则将返回适当的错误。什么时候 使用REPLACE或ON DUPLICATE KEY UPDATE时,需要的行 替换或更新将使用给定值进行更新。这有效 就像这些行的UPDATE语句一样。参照性 约束和其他完整性检查得到实施和更新 触发器被激活。返回的行数只是总数 插入和更新的行数。