MariaDB社区

标题: mysql不能实时更新 [打印本页]

作者: huns2009    时间: 2013-1-1 23:20
标题: mysql不能实时更新
第一运行:
update interface_rpt_msg set dealflag=1 where mid in ('1000056','1000078');
第二运行;
select ids.ismgmsgid,ids.mid,unix_timestamp(msg.submittime) submittime,msg.donetime,msg.srcnumber,msg.committime,msg.status from interface_rpt_msg msg,msgids ids where ids.mid=msg.mid and  msg.dealflag=0 limit 1000
结果
('1000056','1000078')的dealflag还是等于0
数据库使用innodb存储引擎

数据表结构:
| interface_rpt_msg | CREATE TABLE `interface_rpt_msg` (
  `mid` varchar(25) NOT NULL,
  `submittime` varchar(20) DEFAULT NULL,
  `donetime` varchar(20) DEFAULT NULL,
  `srcnumber` varchar(22) DEFAULT NULL,
  `destnumber` varchar(22) DEFAULT NULL,
  `dealflag` int(1) DEFAULT NULL COMMENT '????????????0???1?????????',
  `committime` varchar(20) DEFAULT NULL,
  `servicenumber` varchar(22) DEFAULT NULL,
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `status` varchar(12) DEFAULT NULL COMMENT '????',
  PRIMARY KEY (`mid`),
  KEY `mid` (`mid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

代码使用JAVA自动提交事务
删除也不能立即删除,需要过10S秒后才能删除。

请大师们关注


作者: huns2009    时间: 2013-1-2 10:53
问题已经解决:
ORACLE没有这个限制,这个可能是MYSQL性能问题,事务一次处理不能小于950毫秒。如果小于这个数查询的结果返回以前的值
作者: kider    时间: 2013-1-4 17:09
应该跟事务隔离级别有关吧,
MySQL默认是repeatable read
       不会脏读、Non-repeatable Reads(不可重复读),但会Phantom Reads(幻读)
Oracle默认是read committed
       不会脏读,但会Non-repeatable Reads(不可重复读)和Phantom Reads(幻读)

作者: huns2009    时间: 2013-1-5 09:14
kider 发表于 2013-1-4 17:09
应该跟事务隔离级别有关吧,
MySQL默认是repeatable read
       不会脏读、Non-repeatable Reads(不可重 ...

不好意思,现在彻底解决了。
查询增加了SQL_NO_CACHE,看似有点效果,但真正原因是我这边粗心消息ID取错了。



作者: kider    时间: 2013-1-5 09:50
解决了就好,努力...




欢迎光临 MariaDB社区 (http://123.56.88.72/) Powered by Discuz! X3.2