写入数据后程序查询没结果

问题

l-hoteldb11.h.cn6:3307/zyj_msg, 对于刚写入的数据,查询不到结果
transaction_isolation = REPEATABLE-READ

详情

  1. 先执行数据更新和插入语句, 如下:
    SET autocommit=0
    UPDATE full_zyj_wrapper_log SET feedBack='1',checktime=1427203789488 WHERE hotelSeq='guangzhou_9930' AND codeBase='wiqunarqta2' AND roomID='471701_127488' AND fromDate='2015-03-28'
    INSERT INTO exclude_monitor (codeBase, hotelSeq, roomID, roomName, checkInDate, checkTime, expireTime, status, updateTime) VALUES ('wiqunarqta2','guangzhou_9930','471701_127488','豪华单人间(预留房1
    8:00过时自动关房无效)-豪华单','2015-03-28',1427203789488,1427290189488,'0',(UNIX_TIMESTAMP()+1)*1000) on duplicate key update checkTime=values(`checkTime`),roomName=values(`roomName`),status=values(`status`),expireTime=values(`ex
    pireTime`),updateTime=((UNIX_TIMESTAMP()+1)*1000)
    commit
    
  2. 然后过10秒左右去查询, 如下:
    SELECT id,codeBase,hotelSeq,roomID,roomName,checkInDate,checkTime,expireTime,status FROM exclude_monitor WHERE updateTime>=1427203770091 and updateTime<1427203780091
    
  3. 程序查不到结果, 但是手动去数据库查就能查到结果

排查

  • 怀疑是事务顺序问题
  • 怀疑是语句执行超时问题
  • 打印取出内容
  • 打印当前的事务状态 show variables like 'autocommit'; ,最终定位问题

总结

对于此类问题, 刚开始的时候怀疑SELECT语句包含在事务中,执行了类似下面的逻辑

  1. 线程1, 拿到一个数据库连接, 开启一个事务(autocommit=0), 执行任务,未提交, 就将线程归还到线程池
  2. 线程2, 拿到另一个数据库连接, 开启一个事务, 执行任务, 即INSERT操作,提交后, 将线程归还到线程池
  3. 线程3, 拿到线程1用过的连接, 因为这个事务未提交, 而且是在INSERT之前开启的事务, 所以它来执行查询, 查不到线程2所插入的数据

排查过程中, 开发一直肯定, 语句的事务提交了, SELECT中没有事务, 在此, 用下面这句话"劝说"比较合适
shuai.lou(娄帅) 03-25 15:05:54
一定不要相信自己写的代码和所谓的框架

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值