如何生成唯一序列号
需要使用唯一序列号的场景
- 数据库主键。2.业务序列号,如发票号、车票号、订单号等...
生成序列号的方法
生成序列号的方法.png
如何选择生成序列号的方式
优先选择系统提供的序列号生成方式。
弊端:容易造成序列号不连续,序列将会产生空洞。
创建数据库,创建表,插入数据。
CREATE TABLE t(id INT AUTO_INCREMENT NOT NULL,PRIMARY KEY(id));
准备数据.png
序列号不连续产生空洞.png
在特殊情况下可以使用SQL方式生成序列号
用SQL来是生成特殊的序列号。
需求:生成订单序列号,并且订单号的格式如下:
YYYYMMDDNNNNNNN。如:201505120000003
CREATE TABLE order_seq(timestr VARCHAR(100),order_sn VARCHAR(255));
CREATE PROCEDURE seq_no()
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;
创建序列号的存储过程.png
image.png











网友评论