on duplicate key update d=d+1
需要设置唯一索引,当插入的数据与已有数据冲突时(仅插入会报错),触发update子句
执行 update 语句以前
先执行
START TRANSACTION
开始事务处理
会话1:
mysql>select * from test_main
+----+-------+
| id | value |
+----+-------+
| 1 | ONE |
| 2 | TWO |
| 3 | THREE |
| 4 | Four |
+----+-------+
4 rows in set (0.00 sec)
mysql>START TRANSACTION
Query OK, 0 rows affected (0.00 sec)
mysql>UPDATE test_main SET value = 'FOUR-4' WHERE id = 4
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
会话2:
mysql>select * from test_main
+----+-------+
| id | value |
+----+-------+
| 1 | ONE |
| 2 | TWO |
| 3 | THREE |
| 4 | Four |
+----+-------+
4 rows in set (0.00 sec)
mysql>START TRANSACTION
Query OK, 0 rows affected (0.00 sec)
mysql>UPDATE test_main SET value ='THREE-3' WHERE id = 3
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
会话1:
mysql>select * from test_main
+----+--------+
| id | value |
+----+--------+
| 1 | ONE|
| 2 | TWO|
| 3 | THREE |
| 4 | FOUR-4 |
+----+--------+
4 rows in set (0.00 sec)
mysql>UPDATE test_main SET value ='THREE-5' WHERE id = 3
由于 id=3 的行,已经被会话2修改,并锁定,因此会话1当前进入等待状态。
一定时间后超时错误发生
mysql>UPDATE test_main SET value ='THREE-5' WHERE id = 3
ERROR 1205 (HY000): Lock wait timeout exceededtry restarting transaction
会话2:
mysql>commit
Query OK, 0 rows affected (0.05 sec)
会话1:
mysql>commit
Query OK, 0 rows affected (0.03 sec)
mysql>select * from test_main
+----+---------+
| id | value |
+----+---------+
| 1 | ONE |
| 2 | TWO |
| 3 | THREE-3 |
| 4 | FOUR-4 |
+----+---------+
4 rows in set (0.00 sec)
python爬取数据后储存数据到mysql数据库后添加新数据覆盖旧。1、先根据PRIMARY_KEY或UNIQUE字段查询库里是否存在数据(select)。
2、如果存在数据,则更改许要更改的字段(update)。
3、如果不粗在数据,则进行添加新数据(insert)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)