需要用到事务处理和存储过程。
不具备这方面基础的,要看一眼。一眼就可以。
delimiter //
create procedure dede(in p_in int)
begin
declare v_cnt int;
declare v_timestr int;
declare rowcount bigint;
set v_timestr = DATE_FORMAT(NOW(),'%Y%m%d');
select round(rand()*100,0)+1 into v_cnt;
start transaction;
update order_seq set order_sn = order_sn+v_cnt where timestr=v_timestr;
IF ROW_COUNT()=0 THEN
INSERT INTO order_seq(timestr, order_sn)values(v_timestr, v_cnt);
END IF;
SELECT CONCAT(v_timestr, LPAD(order_sn,7,0)) AS order_sn
FROM order_seq WHERE timestr=v_timestr;
COMMIT;
end;
//
delimiter ;
create table order_seq(TIMEstr int, order_sn int)
其中,第一个delimiter用于声明后面//符号。这样存储过程里面的;就不会被当做sql语言断句处理语句了。
最后的delimiter ;用于声明断句还是用;。
一定要记得中间有个空格啊。
存储过程来自于慕课网的mysql开发技巧课程。