我有表accounts
和action
。 accounts
需要根据action
中存储的指令进行修改
在action
中,每行包含一个帐户ID,一个操作(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很有经验,但不幸的是我只是不知道,如何从这里开始。
我需要一张额外的桌子吗?我必须使用触发器吗?
答案 0 :(得分:0)
我见过两种upsert方法。使用第一种技术,在事务中,首先测试该行是否存在,然后使用结果确定是执行插入还是更新。使用第二种技术,您尝试执行更新并验证更新的记录数(JDBC为您提供此信息)。如果它为零,那么你做一个插入,如果一个,那么你就完成了。