【问题标题】:How to add rowid to a table with increment but group by another column?如何将 rowid 添加到具有增量但按另一列分组的表中?
【发布时间】:2015-02-25 04:36:51
【问题描述】:

例如,我有一个 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;

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

【问题讨论】:

    标签: mysql add rowid


    【解决方案1】:

    这在 InnoDB 中不直接可用。 MyISAM 中提供了类似的东西,你有一个 2 列的主键(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 对表进行改造。但它不会自动为新行提供 rowId,除非您编写了 TRIGGER。

    【讨论】:

      猜你喜欢
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 2022-12-13
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多