美文网首页
MySQL如何生成唯一序列号

MySQL如何生成唯一序列号

作者: honest涛 | 来源:发表于2020-06-06 11:08 被阅读0次

如何生成唯一序列号

需要使用唯一序列号的场景

  1. 数据库主键。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

相关文章

网友评论

      本文标题:MySQL如何生成唯一序列号

      本文链接:https://www.haomeiwen.com/subject/khittktx.html