CREATE DEFINER=`sa`@`%` FUNCTION `getnextint`(moid VARCHAR(50)) RETURNS varchar(200) CHARSET utf8mb4 COLLATE utf8mb4_general_ci
BEGIN
-- 得到下一个序列数,返回,并更新到对应序列中
LOCK incrementer WRITE;
LOCK incrementer read;
DECLARE next INT;
DECLARE rule VARCHAR(200);
SET next = (select i.next from incrementer i where i.moid = moid ) + 1;
SET rule = (select i.rule from incrementer i where i.moid = moid);
UPDATE incrementer i SET i.next= next WHERE (i.moid=moid);
UNLOCK incrementer;
return CONCAT(rule,next,'');
end
理解排他锁
第一次执行
BEGIN;
select * from tf_user where id = 1 for update
-- commit;
第二次执行
select * from tf_user where id = 1 for update