【问题标题】:MySQL AUTO_INCREMENT according to yearMySQL AUTO_INCREMENT 根据年份
【发布时间】:2014-06-10 01:11:04
【问题描述】:

我正在创建一个票务系统,这是我的表结构:

CREATE TABLE tix_sip
(
tktNum INT UNSIGNED NOT NULL,
sipNum INT UNSIGNED AUTO_INCREMENT,
PRIMARY KEY( sipNum ),
FOREIGN KEY(tktNum) REFERENCES Tix (tktNum)
);

我希望我的sipNum 发生的事情是按年份编号。

示例:20140001, 20140002, ..20140334, 20140335....

如何让它自动更改前 4 位数字,这样每次明年到来时,它都会创建新的\另一组 AUTO_INCREMENTed 数字

示例:20150001, 20150002........ 20160001, 20160002..

顺便说一句,我在我的程序中使用 php 代码,以防万一解决方案创建一个函数会有所帮助。谢谢

【问题讨论】:

  • 为什么要这样做而不是使用复合键?
  • 请告诉我你的想法。我不太了解复合键
  • 希望对您有所帮助:stackoverflow.com/questions/14373582/…
  • 我错过了你的问题的一部分,所以我认为复合键不会有帮助。另外,我仍然认为您没有提供想要这样做的充分理由。一旦你能够描述你的推理,我觉得会有更好的解决方案

标签: php mysql auto-increment


【解决方案1】:

您可以使用MySQL Custom AUTO_INCREMENT values,如下所示: (先阅读文章)

创建表和触发器:

CREATE TABLE test
(
    id int not null auto_increment primary key,
    year_autonum varchar(20)
);

delimiter //
DROP TRIGGER IF EXISTS custom_autonums_bi//

CREATE TRIGGER custom_autonums_bi BEFORE INSERT ON test
FOR each ROW
BEGIN
   SET NEW.year_autonum = getNextCustomSeq(year(now()),year(now()));
END//

delimiter ;

插入一些值:

insert into test(id) values (null);
insert into test(id) values (null);
insert into test(id) values (null);
...

选择数据:

mysql> select * from test;
+----+--------------+
| id | year_autonum |
+----+--------------+
|  1 | 2014-000001  |
|  2 | 2014-000002  |
|  3 | 2014-000003  |
|  4 | 2014-000004  |
|  5 | 2014-000005  |
|  6 | 2014-000006  |
+----+--------------+
6 rows in set (0.00 sec)

您可以更改过程getNextCustomSeq 以省略斜线- 符号。

【讨论】:

    猜你喜欢
    • 2012-02-24
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2014-09-07
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多