Mysql 通过比较值进行sql插入或更新
假设我有一个这样的表,有很多行:Mysql 通过比较值进行sql插入或更新,mysql,sql,Mysql,Sql,假设我有一个这样的表,有很多行: id | a | b | c 在每次插入之前,应检查是否有一行具有相同的“a”和“b”,如果是,则不插入,而是通过汇总其c来更新该行上的“c” 如何在sql中实现这一点?下面是一个使用ON DUPLICATE KEY的示例: 您必须在a和b上创建一个唯一密钥 改变我的桌子 添加唯一密钥idx_ab(a,b) 插入或更新 INSERT INTO my_table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KE
id | a | b | c
在每次插入之前,应检查是否有一行具有相同的“a”和“b”,如果是,则不插入,而是通过汇总其c来更新该行上的“c”
如何在sql中实现这一点?下面是一个使用ON DUPLICATE KEY的示例:
您必须在a和b上创建一个唯一密钥
改变我的桌子
添加唯一密钥idx_ab(a,b)
插入或更新
INSERT INTO my_table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=c+VALUES(c);
样本
MariaDB [yourSchema]> select * from my_table;
Empty set (0.00 sec)
MariaDB [yourSchema]> INSERT INTO my_table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(c);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
MariaDB [yourSchema]> select * from my_table;
+----+------+------+------+
| id | a | b | c |
+----+------+------+------+
| 6 | 1 | 2 | 3 |
| 7 | 4 | 5 | 6 |
+----+------+------+------+
2 rows in set (0.00 sec)
MariaDB [yourSchema]> INSERT INTO my_table (a,b,c) VALUES (1,2,99) ON DUPLICATE KEY UPDATE c=VALUES(c);
Query OK, 2 rows affected (0.05 sec)
MariaDB [yourSchema]> select * from my_table;
+----+------+------+------+
| id | a | b | c |
+----+------+------+------+
| 6 | 1 | 2 | 99 |
| 7 | 4 | 5 | 6 |
+----+------+------+------+
2 rows in set (0.00 sec)
MariaDB [yourSchema]>
你试过触发器吗?不要使用触发器。使用插入。。。。在重复键上,如果所有行上都有唯一的索引,则该键将同时执行这两项操作。我将发布一个示例作为答案,如果它是oracle的话?Nancy Guruswamy-不,只有MySQL/MariaDB。我不知道怎么穿上它ORACLE@NancyGuruswamy-我已经在我的answer@Nancy古鲁斯瓦米-我在我的回答中为您添加了一个带总和的样本。在我的回答中我看不到它。。。。重复密钥更新时c=c+值(c);