如何使用增量将 rowid 添加到 table 但按另一列分组?
How to add rowid to a table with increment but group by another column?
例如,我有一个表 1:
+---------------------+---------------+
| 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;
但它只是告诉我错误。如何得到我想要的结果?
这在 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,那么 table 可以使用 @variables 对 rowId 进行改造。但它不会自动为新行提供 rowId,除非你写了一个 TRIGGER。
例如,我有一个表 1:
+---------------------+---------------+
| 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;
但它只是告诉我错误。如何得到我想要的结果?
这在 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,那么 table 可以使用 @variables 对 rowId 进行改造。但它不会自动为新行提供 rowId,除非你写了一个 TRIGGER。