写了一个存储过程
create procedure sp_test()
begin
select tmp_id,tmp_name from tmp_table where tmp_atatus=0 order by tmp_id desc limit 2;
update tmp_table set tmp_atatus=1 where tmp_atatus=0 order by tmp_id desc limit 2;
end$$程序里面每一秒调用一次这个存储过程,然后就发现,偶尔会出现select和update操作的不是同两个数据。
也是就是select取到的是1,2数据,update操作的是3,4数据。
对mysql不熟悉,求大神指教一下..
create procedure sp_test()
begin
select tmp_id,tmp_name from tmp_table where tmp_atatus=0 order by tmp_id desc limit 2;
update tmp_table set tmp_atatus=1 where tmp_atatus=0 order by tmp_id desc limit 2;
end$$程序里面每一秒调用一次这个存储过程,然后就发现,偶尔会出现select和update操作的不是同两个数据。
也是就是select取到的是1,2数据,update操作的是3,4数据。
对mysql不熟悉,求大神指教一下..
程序里面还有一句sql对tmp_table操作,但是,是顺序执行的代码,跟调用这个存储过程的一前一后,并且存储过程是每隔一秒才调用一次。
while(1)
{
...
if(interval(1000))
sql(sp_test);
...
changesql("update tmp_table set tmp_atatus=2 where tmp_id=? ");
...
}再弱弱的问一下:存储过程里面难道不是按顺序执行的么,还要加个锁。
update tmp_table set tmp_atatus=1 where <pk>=:<pk> and ....;
貌似是执行的太快了,那个存储过程还没执行完,程序里面的就已经执行到下面的changesql语句了,我加了一个sleep好了。
但是我想问一下,这个是神马情况,C++程序只管调用一下,不管那个存储过程是否执行完了么?