テーブルに複数のレコードを挿入するトランザクションを開始します。トランザクションがコミットされる前に、データベースから最後に挿入されたレコードを選択できますか?
5384 次
2 に答える
18
はい。
トランザクション内では、アプリケーションはすべてを認識します。
ただし、他のトランザクションには変更の一部が表示されません。
トランザクションのポイントは、一連のステートメントをデータベースに対する1つのアトミックな変更のように見せることです。
コミットすると、トランザクション内のすべてのステートメントが完成し、他のすべての人がその効果を確認できます。
ロールバックした場合、トランザクション内のステートメントはファイナライズされず、データベースに変更は発生しません。
ところで、すべてのステートメントがトランザクションの一部になるわけではありません。DDL(たとえば、作成と削除)は、以前のトランザクションをすべて終了します。
于 2008-12-18T03:03:27.680 に答える
7
はい、トランザクション中またはトランザクション後に last_insert_rowid() 関数を使用できます。
last_insert_rowid() 関数は、関数を呼び出したデータベース接続から挿入された最後の行の ROWID を返します。
言い換えると:
SQLite version 3.6.23
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table T (C);
sqlite> insert into T values ('hello');
sqlite> select last_insert_rowid();
1
sqlite> BEGIN;
sqlite> insert into T values ('test 2');
sqlite> select last_insert_rowid();
2
sqlite> select rowid,* from T;
1|hello
2|test 2
sqlite> ROLLBACK;
sqlite> select last_insert_rowid();
2
sqlite> select rowid,* from T;
1|hello
sqlite>
于 2010-04-16T23:43:44.990 に答える