2

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

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

我正在使用 Mysql、ASP.NET。

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

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
4

3 回答 3

4

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

SELECT * 
FROM table_name 
ORDER BY id DESC 
LIMIT 10;

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

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;
于 2012-10-19T05:54:53.700 回答
0

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

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

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

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

于 2012-10-19T06:09:28.087 回答
0

我认为这会更简单:

SELECT MAX(id) INTO @Max_table_Id FROM table;

// Insert operation here//////

SELECT * FROM table WHERE id>@Max_table_Id;
于 2012-10-19T06:18:07.910 回答