简体   繁体   English

插入时hsqldb更新

[英]hsqldb update on insert

Does anyone know of a solution to make HSQLDB update columns by calling INSERT. 有没有人知道通过调用INSERT来制作HSQLDB更新列的解决方案。 I would like my code to be able to insert, and if there's already data, to update that data. 我希望我的代码能够插入,如果已有数据,则更新该数据。 I know MySQl, I believe, has 'ON DUPLICATE KEY UPDATE'. 我知道MySQl,我相信,它已经'重复关键更新'。 I can't seem to find any recent documentation on this. 我似乎无法找到任何最近的文档。

A good sample is sometimes better the formal documentation on MERGE statement :) 有关MERGE语句的正式文档,有时候会有更好样本:)

Sample 1 样品1

For a table ( MY_TABLE ) with tho columns ( COL_A and COL_B ), where the first column is a primary key: 对于表( MY_TABLE )与寿列( COL_ACOL_B ),其中第一列是主键:

MERGE INTO MY_TABLE AS t USING (VALUES(?,?)) AS vals(a,b) 
        ON t.COL_A=vals.a
    WHEN MATCHED THEN UPDATE SET t.COL_B=vals.b
    WHEN NOT MATCHED THEN INSERT VALUES vals.a, vals.b

Sample 2 样本2

Let's add another column ( COL_C ) to our table: 让我们在表中添加另一列( COL_C ):

MERGE INTO MY_TABLE AS t USING (VALUES(?,?,?)) AS vals(a,b,c) 
        ON t.COL_A=vals.a
    WHEN MATCHED THEN UPDATE SET t.COL_B=vals.b, t.COL_C=vals.c
    WHEN NOT MATCHED THEN INSERT VALUES vals.a, vals.b, vals.c

Sample 3 样本3

Now let's change the primary key to consist of first two columns ( COL_A and COL_B ): 现在让我们将主键更改为前两列( COL_ACOL_B ):

MERGE INTO MY_TABLE AS t USING (VALUES(?,?,?)) AS vals(a,b,c) 
        ON t.COL_A=vals.a AND t.COL_B=vals.b
    WHEN MATCHED THEN UPDATE SET t.COL_C=vals.c
    WHEN NOT MATCHED THEN INSERT VALUES vals.a, vals.b, vals.c

Enjoy! 请享用!

HSQLDB provides the MERGE statement for this purpose. HSQLDB为此提供了MERGE语句。

http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_merge_statement http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_merge_statement

Alternatively, you can write a short stored procedure to insert, then catch any constraint violation exception and perform an update. 或者,您可以编写一个简短的存储过程来插入,然后捕获任何约束违例异常并执行更新。

http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#src_psm_handlers http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#src_psm_handlers

Update: From version 2.3.4 HSQLDB also supports the MySQL syntax for ON DUPLICATE KEY 更新:从版本2.3.4开始,HSQLDB还支持ON DUPLICATE KEY的MySQL语法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM