希望mysql自动增量表为订单号-MCI-YYMMDD001,001每天从001开始
我曾经 我需要每天从001开始 这里有一个方法 首先,一些DDL希望mysql自动增量表为订单号-MCI-YYMMDD001,001每天从001开始,mysql,Mysql,我曾经 我需要每天从001开始 这里有一个方法 首先,一些DDL DROP TABLE IF EXISTS my_table; CREATE TABLE my_table (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,invoice_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,public_id VARCHAR(30) NOT NULL); 第一步。为订单/发票创建占位符 INSERT INTO my_table
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,invoice_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,public_id VARCHAR(30) NOT NULL);
第一步。为订单/发票创建占位符
INSERT INTO my_table (invoice_date) VALUES (NULL);
SELECT * FROM my_table;
+----+---------------------+--------------+
| id | invoice_date | public_id |
+----+---------------------+--------------+
| 1 | 2016-06-06 10:29:29 | |
+----+---------------------+--------------+
INSERT INTO my_table (id,invoice_date) VALUES (5,NULL);
SELECT * FROM my_table;
+----+---------------------+--------------+
| id | invoice_date | public_id |
+----+---------------------+--------------+
| 1 | 2016-06-06 10:29:29 | 20160606-001 |
| 5 | 2016-06-06 10:30:57 | |
+----+---------------------+--------------+
第二步。更新结果
UPDATE my_table a
JOIN
( SELECT x.*
, COUNT(*) total
FROM my_table x
JOIN my_table y
ON DATE(y.invoice_date) = DATE(x.invoice_date)
AND y.invoice_date <= x.invoice_date
GROUP
BY id
) b
ON b.id = a.id
SET a.public_id = CONCAT(DATE_FORMAT(a.invoice_date,'%Y%m%d'),'-',LPAD(b.total,3,0));
SELECT * FROM my_table;
+----+---------------------+--------------+
| id | invoice_date | public_id |
+----+---------------------+--------------+
| 1 | 2016-06-06 10:29:29 | 20160606-001 |
+----+---------------------+--------------+
…然后重复
UPDATE my_table a
JOIN
( SELECT x.*
, COUNT(*) total
FROM my_table x
JOIN my_table y
ON DATE(y.invoice_date) = DATE(x.invoice_date)
AND y.invoice_date <= x.invoice_date
GROUP
BY id
) b
ON b.id = a.id
SET a.public_id = CONCAT(DATE_FORMAT(a.invoice_date,'%Y%m%d'),'-',LPAD(b.total,3,0));
SELECT * FROM my_table;
+----+---------------------+--------------+
| id | invoice_date | public_id |
+----+---------------------+--------------+
| 1 | 2016-06-06 10:29:29 | 20160606-001 |
| 5 | 2016-06-06 10:30:57 | 20160606-002 |
+----+---------------------+--------------+
这些步骤1和2可以绑定到事务中,这样,如果步骤2失败,步骤1也会失败。然而,我怀疑有一种方法可以将其重写为单个查询。这里有一种方法
首先,一些DDL
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,invoice_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,public_id VARCHAR(30) NOT NULL);
第一步。为订单/发票创建占位符
INSERT INTO my_table (invoice_date) VALUES (NULL);
SELECT * FROM my_table;
+----+---------------------+--------------+
| id | invoice_date | public_id |
+----+---------------------+--------------+
| 1 | 2016-06-06 10:29:29 | |
+----+---------------------+--------------+
INSERT INTO my_table (id,invoice_date) VALUES (5,NULL);
SELECT * FROM my_table;
+----+---------------------+--------------+
| id | invoice_date | public_id |
+----+---------------------+--------------+
| 1 | 2016-06-06 10:29:29 | 20160606-001 |
| 5 | 2016-06-06 10:30:57 | |
+----+---------------------+--------------+
第二步。更新结果
UPDATE my_table a
JOIN
( SELECT x.*
, COUNT(*) total
FROM my_table x
JOIN my_table y
ON DATE(y.invoice_date) = DATE(x.invoice_date)
AND y.invoice_date <= x.invoice_date
GROUP
BY id
) b
ON b.id = a.id
SET a.public_id = CONCAT(DATE_FORMAT(a.invoice_date,'%Y%m%d'),'-',LPAD(b.total,3,0));
SELECT * FROM my_table;
+----+---------------------+--------------+
| id | invoice_date | public_id |
+----+---------------------+--------------+
| 1 | 2016-06-06 10:29:29 | 20160606-001 |
+----+---------------------+--------------+
…然后重复
UPDATE my_table a
JOIN
( SELECT x.*
, COUNT(*) total
FROM my_table x
JOIN my_table y
ON DATE(y.invoice_date) = DATE(x.invoice_date)
AND y.invoice_date <= x.invoice_date
GROUP
BY id
) b
ON b.id = a.id
SET a.public_id = CONCAT(DATE_FORMAT(a.invoice_date,'%Y%m%d'),'-',LPAD(b.total,3,0));
SELECT * FROM my_table;
+----+---------------------+--------------+
| id | invoice_date | public_id |
+----+---------------------+--------------+
| 1 | 2016-06-06 10:29:29 | 20160606-001 |
| 5 | 2016-06-06 10:30:57 | 20160606-002 |
+----+---------------------+--------------+
这些步骤1和2可以绑定到事务中,这样,如果步骤2失败,步骤1也会失败。然而,我怀疑有一种方法可以将其重写为一个查询。实际上不太可能需要存储此信息。好的,在php中,当用户输入html数据并自动生成一个订单时,是否有任何方法,如MCI-YYMMDD001,我想001每天都从001开始。请注意,如果您的竞争对手掌握了这一点,那么他们将对您一天生成的订单数量有一个大致的了解。您实际上不太可能需要存储这一点。好的,在php中,当用户输入html数据并自动生成订单时,是否有任何方法,如MCI-YYMMDD001,我猜001将每天从001开始。请注意,如果您的竞争对手掌握了这一点,那么他们将对您一天生成的订单数量有一个合理的了解。