问题描述
客户在含有自增主键的表格中成功插入数据后,使用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 如果您有其他问题,欢迎您联系火山引擎技术支持服务