生成具有两列的自动递增数字

时间:2015-02-16 18:03:19

标签: mysql database

我想创建一个表,以便我有一个基于日期的ID号,以及一个ID作为唯一的主键。

即:

2015-2-1-1
2015-2-1-2

但是,如果我创建:

2015-2-2-1

计数器应该从1开始重新启动。

我尝试过使用以下内容:

CREATE TABLE `invoices` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `date` date NOT NULL,
  `po_id` int(11) unsigned DEFAULT NULL,
  `description` varchar(256) NOT NULL,
  `client_id` int(11) unsigned DEFAULT NULL,
  `status` enum('unpaid','paid','partial') DEFAULT 'unpaid',
  PRIMARY KEY (`id`,`date`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;

但它并不像我想的那样工作。

1 个答案:

答案 0 :(得分:0)

如果你想要一个两列主键(date,id)和id,它应该从每个日期的1开始自动递增。只需为您的主要列密钥设置date,并在密钥定义的第二个位置设置id

CREATE TABLE `invoices` (
   `date` date NOT NULL,
   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
   `po_id` int(11) unsigned DEFAULT NULL,
   `description` varchar(256) NOT NULL,
   `client_id` int(11) unsigned DEFAULT NULL,
   `status` enum('unpaid','paid','partial') DEFAULT 'unpaid',
   PRIMARY KEY (`date`, `id`)
 ) ENGINE=MyIsam DEFAULT CHARSET=latin1;

将设置内部密钥作为示例,但您会看到两列:

+----+------------+
| id | date       |
+----+------------+
| 1  | 2012-01-01 |
| 2  | 2012-01-01 |
| 1  | 2012-01-02 |
| 2  | 2012-01-02 |
+----+------------+

编辑:您必须使用MyIsam格式