Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql中的第二个自动增量_Mysql_Sql_Innodb - Fatal编程技术网

mysql中的第二个自动增量

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

我有一个mySQL(InnoDB)表:

我需要以下关系:

  • belegID是主键(唯一ID)
  • docNum也是一个(唯一的)ID,但与年份相关。每年从1开始
我如何在mySQL端解决这个问题,如何获得下一个docNum(与年份相关的ID)

提前感谢您。

您可以使用来解决您的问题。下面是一个简单的示例(若要尝试使用,请不要忘记重命名模式和表):

假设我们有一个表:

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)