假设我有一个这样的表,有很多行:
id | a | b | c
Run Code Online (Sandbox Code Playgroud)
每一个INSERT之前应该有一个检查,如果存在与相同的"A"一行,并同"B",如果是不插入,但更新该行"C"通过总结其C的.
如何在sql中实现?
这是一个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)
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |