我想创建一个表,以便有一个基于日期的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;


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

最佳答案

如果要使用两列主键(日期,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格式

10-08 08:58
查看更多