2

私のアプリケーションでは、グリッドビューでのインポート操作によって新しく追加された RECORDS を表示したいと考えています。新しく追加された行を取得するための方法が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
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 に答える