0

我有桌子accountsactionaccounts需要根据存储的指令进行修改action
每行包含一个帐户 ID 、action一个操作(i=插入、u=更新、d=删除、x=无效操作)和更新帐户的数量。

  • 在插入时,如果帐户已经存在,则应该进行更新
  • 在更新时,如果帐户不存在,则由插入创建
  • 在删除时,如果该行不存在,则不采取任何措施

输入

帐户:

+---id----value--+
|   1  |   1000  |
|   2  |   2000  |
|   3  |   1500  |
|   4  |   6500  |
|   5  |    500  |
+----------------+

行动:

+---account_id---o---new_value---status---+
|       3      | u |     599   |          |
|       6      | i |    2099   |          |
|       5      | d |           |          |
|       7      | u |    1599   |          |
|       1      | i |     399   |          |
|       9      | d |           |          |
|      10      | x |           |          |
+-----------------------------------------+

输出

帐户:

+---id----value--+
|   1  |    399  |
|   2  |    800  |
|   3  |    599  |
|   4  |   1400  |
|   6  |  20099  |
|   7  |   1599  |
+----------------+

行动:

+---account_id---o---new_value-------------------status----------------+ 
|       3      | u |     599   | Update: Success                       |
|       6      | i |   20099   | Update: Success                       |
|       5      | d |           | Delete: Success                       |
|       7      | u |    1599   | Update: ID not founds. Value inserted |
|       1      | i |     399   | Insert: Acc exists. Updated instead   |
|       9      | d |           | Delete: ID not found                  |
|      10      | x |           | Invalid operation: No action taken    |
+----------------------------------------------------------------------+

我对 Java 和 JDBC 有经验,但不幸的是我不知道如何从这里开始。
我需要一张额外的桌子吗?我必须使用触发器吗?

4

1 回答 1

0

我已经看到了两种用于 upsert 的技术。使用第一种技术,在事务中,您首先测试该行是否存在,并使用结果来确定是执行插入还是更新。使用第二种技术,您尝试执行更新并验证更新的记录数(JDBC 为您提供)。如果为零,则进行插入,如果为一,则完成。

于 2012-05-13T03:59:32.067 回答