mysql事务和过程的区别_mysql 存储过程与事务

最近在工作中要实现一个功能,在一个php文件里有一个流水号的变量,每次运行这个php的文件,这个流水号的变量都得不一样,我就想到用mysql的自增来解决,我写了一个存储过程,

CREATE PROCEDURE mqsearch(IN userid int, IN type int, OUT lshs bigint)

BEGIN

INSERT INTO `sztv_mq_search` (`user_id`, `time`, `type`) VALUES (userid, now(), type);

SELECT id INTO lshs FROM `sztv_mq_search` ORDER BY `id` DESC LIMIT 1;

SELECT lshs;

END

为了写这个存储过程,我去查了很多资料,包括存储过程与事务,。下面是我关于事务的理解。

事务是一串sql语句,这些语句要不一起执行成功,要不就失败,但没有等待功能。

两个用户同时执行我上面的存储过程,A用户执行了insert语句,B用户会接着执行insert语句,而不会等待A用户执行select语句,这样就会出现一个问题,

假如开始最大id是2,A用户执行了insert语句后,最大id变成了2,B用户执行了insert语句,最大id变成了3,A用户执行select语句,获取的最大id就变成了3,这不是我要的结果,应此我就把select语句改成了这样

SELECT last_insert_id() INTO lshs;

总结:

存储过程和事务只是保证所有sql语句执行成功,但不能使B事务等待A事务的sql语句全部执行完成后在开始执行

last_insert_id只跟连接有关,有多少的用户执行代码,就打开多少个连接,就有多少个对应的last_insert_id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值