【问题标题】:How to get the newly added records如何获取新添加的记录
【发布时间】:2012-10-19 05:53:06
【问题描述】:

在我的应用程序中,我想通过网格视图中的导入操作来显示新添加的记录。 sql中是否有任何方法可以检索新添加的行。

我尝试在使用代码中做到这一点,并尝试在插入之前和之后获得差异,并且它可以完美地工作,但会使应用程序非常慢。所以,我想在数据库本身中做到这一点。

我正在使用 Mysql、ASP.NET。

例如: 表可能在导入操作之前有这些记录

ID Name
1  A
2  B
3  C

导入后的表格可能是这样的。

ID Name
1  A
2  B
3  C
4  D
5  E
6  F

我想要这样的结果

ID Name
4  D
5  E
6  F

【问题讨论】:

    标签: c# asp.net mysql sql


    【解决方案1】:

    您需要在表上定义AUTO_INCREMENT 列,或者您可以使用TIMESTAMP 字段来检索新添加的记录,试试这个:

    SELECT * 
    FROM table_name 
    ORDER BY id DESC 
    LIMIT 10;
    

    对于单行插入,您可以在 INSERT 查询之后使用 LAST_INSERT_ID

    SELECT LAST_INSERT_ID();
    

    对于多行插入,您可以按照以下步骤操作:

    START TRANSACTION;
    
    SELECT MAX(id) INTO @var_max_id FROM table_name;
    
    INSERT INTO table_name VALUES(..),(..),...;
    
    SELECT MAX(id) INTO @var_max_id_new FROM table_name;
    
    COMMIT;
    
    SELECT * 
    FROM table_name 
    WHERE id BETWEEN (@var_max_id + 1) AND @var_max_id_new;
    

    【讨论】:

    • 如果我使用限制,我只能得到 10 条记录。但我不确定用户在一次导入操作中可以添加多少条记录。
    【解决方案2】:

    我认为这会更简单:

    SELECT MAX(id) INTO @Max_table_Id FROM table;
    
    // Insert operation here//////
    
    SELECT * FROM table WHERE id>@Max_table_Id;
    

    【讨论】:

      【解决方案3】:

      如果您对记录使用自动增量 ID,您可以使用:

      SELECT * FROM [table] ORDER BY [id column] DESC LIMIT [number of records]
      

      否则,您应该为此目的在您的记录中添加一个 TIMESTAMP 列并按此列选择。

      就个人而言,如果有一个选项,我不会为此使用记录 ID,因为这不是它们的用途。记录 ID 可以在应用程序的整个生命周期中更改,它们不一定代表添加项目的顺序。特别是在数据导入/导出场景中。我更喜欢创建特殊列来存储此类信息,例如“CreatedAt”、“ModifiedAt”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        • 1970-01-01
        • 1970-01-01
        • 2020-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多