sql通过比较值插入或更新

jaz*_*azz 2 mysql sql

假设我有一个这样的表,有很多行:

id | a | b | c
Run Code Online (Sandbox Code Playgroud)

每一个INSERT之前应该有一个检查,如果存在与相同的"A"一行,并同"B",如果是不插入,但更新该行"C"通过总结其C的.

如何在sql中实现?

Ber*_*fen 6

这是一个ON DUPLICATE KEY的例子:

您必须在a和b上创建唯一键

ALTER TABLE my_table ADD UNIQUE KEY 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);
Run Code Online (Sandbox Code Playgroud)

样品

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]>
Run Code Online (Sandbox Code Playgroud)