如何将具有自动递增值的列添加到 mySql 数据库的表中?

Posted

技术标签:

【中文标题】如何将具有自动递增值的列添加到 mySql 数据库的表中?【英文标题】:How to add a column with auto-incremented values to a table of mySql database? 【发布时间】:2013-09-20 12:37:52 【问题描述】:

我有一个结构如下的表-

  Col-1      Col-2     
(primary)

   234        A        
   154        B
   987        B
   374        C
   983        C
   364        C
   873        A 

我必须在此表中插入一列,例如 Col-3,并根据 Col-2 值从 0 开始自动递增值。对于上表,我希望这些值类似于-

  Col-1      Col-2      Col-3
(primary)

   234        A           1
   154        B           1
   987        B           2
   374        C           1
   983        C           2
   364        C           3
   873        A           2

表是静态的,所以如果可能的话,我想直接在phpmyadmin中运行查询。

任何帮助将不胜感激,谢谢。

【问题讨论】:

如何找到Col-3 值? 你可以像这里***.com/questions/3162389/multiple-ranks-in-one-table一样设置初始值。添加适当的触发器应该可以解决插入新数据的问题。 【参考方案1】:

您可以使用相关子查询来做到这一点。

SELECT  A.Col1, 
        A.Col2, 
        (
            SELECT  COUNT(*)
            FROM    tableName c
            WHERE   c.Col2 = a.Col2 AND
                    c.Col1 <= a.Col1) AS RowNumber
FROM    TableName a
ORDER   BY a.Col2, RowNumber 
SQLFiddle Demo

【讨论】:

非常感谢,这正是我想要的:D。还有一件事,你能告诉我要使用的查询吗,如果我已经在表中有 Col-3 并且需要使用正确的值进行更新。 @491243- 假设我在与Table-1Col-1 关联的Table-2 中有Col-2;什么是查询?提前致谢。 你需要加入它。可以给样本记录吗? Here are my tables。现在,根据Table-2中的B_ID,我想更新Table-1DisplayOrder(两个表都与A_ID链接) Err.. 如果2341,那么231 应该是2;因为两者都有相同的B_ID。看,显示顺序应该符合B_ID;希望你明白..【参考方案2】:

这不可能直接按照您的规范进行,并且需要一个触发器,该触发器将使用COUNT(Col-2) 设置 Col-3 的值。我认为这会起作用,但请测试以确保:

CREATE TRIGGER col2_count AFTER INSERT ON your_table
FOR EACH ROW SET col3 = COUNT(1) WHERE col2 = NEW.col2;

【讨论】:

以上是关于如何将具有自动递增值的列添加到 mySql 数据库的表中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将具有值的列添加到 Spark Java 中的新数据集?

MySQL自动递增自定义值

如何在表中添加具有默认值的列

将具有默认值的列添加到 SQL Server 中的现有表

如何将数据插入具有自动递增主键的 MySQL?

将具有最接近值的列添加到 PySpark Dataframe