BEFORE INSERT
您可以使用触发器和单独的表格(如果您不介意的话)进行排序,从而在插入时生成对开编号。
首先排序表
CREATE TABLE table1_seq
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
你的实际表
CREATE TABLE Table1
(`id` INT NOT NULL DEFAULT 0,
`folio` VARCHAR(32)
...
);
触发器
DELIMITER $$
CREATE TRIGGER tg_table1_insert
BEFORE INSERT ON Table1
FOR EACH ROW
BEGIN
INSERT INTO table1_seq VALUES (NULL);
SET NEW.id = LAST_INSERT_ID();
SET NEW.folio = CONCAT(DATE_FORMAT(CURDATE(), '%d%m%y'), UPPER(NEW.folio), NEW.id);
END$$
DELIMITER ;
现在您可以插入新记录
INSERT INTO Table1 (`folio`, ...)
VALUES ('a', ...), ('e', ...);
你会在你的桌子1
| 身份证 | 对开 |...
-----------------...
| 1 | 160613A1 |...
| 2 | 160613E2 |...
这是SQLFiddle演示。
另一种方法是将您的INSERT
and包装UPDATE
在存储过程中
DELIMITER $$
CREATE PROCEDURE sp_table1_insert (IN folio_type VARCHAR(1), ...)
BEGIN
DECLARE newid INT DEFAULT 0;
START TRANSACTION;
INSERT INTO table1 (id, ...) VALUES (NULL, ...);
SET newid = LAST_INSERT_ID();
UPDATE table1
SET folio = CONCAT(DATE_FORMAT(CURDATE(), '%d%m%y'), UPPER(folio_type), newid)
WHERE id = newid;
COMMIT;
END$$
DELIMITER ;
然后使用这个存储过程插入新记录
CALL sp_table1_insert ('a',...);
CALL sp_table1_insert ('e',...);
这是SQLFiddle演示。