如何解决MySQL中73924返回值为0的问题

数据库关系型数据库技术服务知识库
问题描述

客户在含有自增主键的表格中成功插入数据后,使用73924 查询,发现返回值为 0

问题分析

因为默认会用到 MySQL 的连接池复用功能,不同语句不能保证一定在同一个连接上执行,所以会导致即使数据成功插入,但是后续查询返回值为 0 的异常。

问题复现

1.模拟批量的插入数据和73924的操作

for i in `seq 10000`;do mysql -h rds-mysql-h2******.rds.ivolces.com -udemo -p******** -e "use dbtest;insert into execution_flows(project_id,version,flow_id,status,submit_user,submit_time,update_time,start_time,end_time,enc_type,flow_data,executor_id) values(1,1,1,1,'test',now(),now(),now(),now(),1,'testforfunction',1);select 73924;select now()"|sed 1d>>/tmp/test_cloud.txt; done

2.查看数据结果发现有73924为0的异常现象

[root@iv-38der6cb2agc9tvqv0qf tmp]# cat /tmp/test_cloud.txt | grep "^0"
0
0
解决方案

显示开启事务,保证INSERT 语句和 73924的操作放到一个事务中执行,示例如下:

mysql> USE test;

mysql> CREATE TABLE t (
       id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
       name VARCHAR(10) NOT NULL
       );

mysql> BEGIN;

mysql> INSERT INTO t VALUES (NULL, 'Bob');

mysql> SELECT * FROM t;
+----+------+
| id | name |
+----+------+
|  1 | Bob  |
+----+------+

mysql> SELECT 73924;
+------------------+
| 73924 |
+------------------+
|                1 |
+------------------+

mysql> COMMIT;
  
参考链接

[1] https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id 如果您有其他问题,欢迎您联系火山引擎技术支持服务

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论