如何将rowid添加到具有增量但由另一列分组的表中?

时间:2015-02-25 04:36:51

标签: mysql add rowid

例如,我有一个table1:

+---------------------+---------------+
| StartTime           | dIPaddr       |
+---------------------+---------------+
| 2014-04-09 09:47:53 | 0.210.208.240 |
| 2014-04-09 09:47:53 | 0.210.208.240 |
| 2014-04-09 09:47:55 | 0.210.208.240 |
| 2014-04-09 08:39:55 | 0.210.243.93  |
| 2014-04-09 08:39:57 | 0.210.243.93  |
| 2014-04-09 08:40:00 | 0.210.243.93  |
| 2014-04-09 13:02:25 | 0.210.25.224  |
| 2014-04-09 13:02:25 | 0.210.25.224  |
| 2014-04-09 13:02:25 | 0.210.25.224  |
| 2014-04-09 13:02:27 | 0.210.25.224  |
+---------------------+---------------+

现在我想得到一个结果:

+---------------------+---------------+---------------+
| StartTime           | dIPaddr       | rowid         |
+---------------------+---------------+---------------+
| 2014-04-09 09:47:53 | 0.210.208.240 | 1             |
| 2014-04-09 09:47:53 | 0.210.208.240 | 2             |
| 2014-04-09 09:47:55 | 0.210.208.240 | 3             |
| 2014-04-09 08:39:55 | 0.210.243.93  | 1             |
| 2014-04-09 08:39:57 | 0.210.243.93  | 2             |
| 2014-04-09 08:40:00 | 0.210.243.93  | 3             |
| 2014-04-09 13:02:25 | 0.210.25.224  | 1             |
| 2014-04-09 13:02:25 | 0.210.25.224  | 2             |
| 2014-04-09 13:02:25 | 0.210.25.224  | 3             |
| 2014-04-09 13:02:27 | 0.210.25.224  | 4             |
+---------------------+---------------+---------------+

rowid是自动增加的,但是由dIPaddr分组。 我尝试使用

ALTER TABLE table1 ADD COLUMN rowId int not null auto_increment 
group by dIPaddr;

但它只是告诉我错误。如何得到我想要的结果?

1 个答案:

答案 0 :(得分:1)

在InnoDB中无法直接使用。在MyISAM中有类似的东西,你有一个2列PRIMARY KEY(dIPaddr,rowId)。这将改为(我认为):

ALTER TABLE table1
ADD COLUMN rowId int not null auto_increment,
ADD PRIMARY KEY(dIPaddr, rowId),
ENGINE=MyISAM;

未使用GROUP BY。 (但这是一个很好的猜测。)

之后,您的INSERT中不包含rowId,系统会自动提供它。

如果您想继续使用InnoDB,那么可以使用@variables对rowId进行改造。但除非你写了TRIGGER,否则它不会自动为新行提供rowId。