mysql中的第二个自动增量
我有一个mySQL(InnoDB)表: 我需要以下关系:mysql中的第二个自动增量,mysql,sql,innodb,Mysql,Sql,Innodb,我有一个mySQL(InnoDB)表: 我需要以下关系: belegID是主键(唯一ID) docNum也是一个(唯一的)ID,但与年份相关。每年从1开始 我如何在mySQL端解决这个问题,如何获得下一个docNum(与年份相关的ID) 提前感谢您。您可以使用来解决您的问题。下面是一个简单的示例(若要尝试使用,请不要忘记重命名模式和表): 假设我们有一个表: CREATE TABLE `t` ( `belegID` int(11) unsigned NOT NULL AUTO_INCRE
- belegID是主键(唯一ID)
- docNum也是一个(唯一的)ID,但与年份相关。每年从1开始
CREATE TABLE `t` (
`belegID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`docNum` int(11) unsigned DEFAULT NULL,
`docYear` date NOT NULL,
PRIMARY KEY (`belegID`)
) ENGINE=InnoDB;
创建触发器后,我们将使用一些数据填充触发器:
mysql> insert into t (docYear) values ('2013-04-06');
Query OK, 1 row affected (0.13 sec)
mysql> insert into t (docYear) values ('2012-02-18');
Query OK, 1 row affected (0.05 sec)
mysql> insert into t (docYear) values ('2013-12-11');
Query OK, 1 row affected (0.02 sec)
mysql> insert into t (docYear) values ('2014-10-30');
Query OK, 1 row affected (0.07 sec)
mysql> insert into t (docYear) values ('2014-01-03');
Query OK, 1 row affected (0.06 sec)
mysql>插入t(docYear)值('2013-04-06');
查询正常,1行受影响(0.13秒)
mysql>插入t(docYear)值('2012-02-18');
查询正常,1行受影响(0.05秒)
mysql>插入t(docYear)值('2013-12-11');
查询正常,1行受影响(0.02秒)
mysql>插入t(docYear)值('2014-10-30');
查询正常,1行受影响(0.07秒)
mysql>插入t(docYear)值('2014-01-03');
查询正常,1行受影响(0.06秒)
现在是我们的结果:
mysql> select * from t;
+---------+--------+------------+
| belegID | docNum | docYear |
+---------+--------+------------+
| 1 | 1 | 2013-04-06 |
| 2 | 1 | 2012-02-18 |
| 3 | 2 | 2013-12-11 |
| 4 | 1 | 2014-10-30 |
| 5 | 2 | 2014-01-03 |
+---------+--------+------------+
5 rows in set (0.00 sec)
mysql>从t中选择*;
+---------+--------+------------+
|贝莱吉德|多克努姆|多克年|
+---------+--------+------------+
| 1 | 1 | 2013-04-06 |
| 2 | 1 | 2012-02-18 |
| 3 | 2 | 2013-12-11 |
| 4 | 1 | 2014-10-30 |
| 5 | 2 | 2014-01-03 |
+---------+--------+------------+
一组5行(0.00秒)
一如所料
提示:重命名字段
docYear
,这很混乱。正确的名称应该是docDate
(或者在其中存储年份,并在单独的字段中存储文档的日期-事实上,这将提高性能,因为从那时起,您可以使用它创建索引,并摆脱year()
函数在触发器内计算MAX
,因此将使用索引)。如果每年从1开始,这不是唯一的,如果您只想在MySQL中这样做,那么就使用触发器。你可以这么做吗?罗兰:是的。这就是为什么unique在括号中的原因。阿尔玛:谢谢你的提示。我希望有另一个解决办法,是的,我被允许这样做。我给你一个反馈。
mysql> insert into t (docYear) values ('2013-04-06');
Query OK, 1 row affected (0.13 sec)
mysql> insert into t (docYear) values ('2012-02-18');
Query OK, 1 row affected (0.05 sec)
mysql> insert into t (docYear) values ('2013-12-11');
Query OK, 1 row affected (0.02 sec)
mysql> insert into t (docYear) values ('2014-10-30');
Query OK, 1 row affected (0.07 sec)
mysql> insert into t (docYear) values ('2014-01-03');
Query OK, 1 row affected (0.06 sec)
mysql> select * from t;
+---------+--------+------------+
| belegID | docNum | docYear |
+---------+--------+------------+
| 1 | 1 | 2013-04-06 |
| 2 | 1 | 2012-02-18 |
| 3 | 2 | 2013-12-11 |
| 4 | 1 | 2014-10-30 |
| 5 | 2 | 2014-01-03 |
+---------+--------+------------+
5 rows in set (0.00 sec)