2008-12-18 18 views

Trả lời

14

Có.

Bên trong giao dịch, ứng dụng của bạn sẽ thấy mọi thứ.

Không có giao dịch nào khác, tuy nhiên, thấy bất kỳ phần nào của thay đổi.

Điểm của giao dịch là tạo một chuỗi các câu lệnh có vẻ là một thay đổi nguyên tử đối với cơ sở dữ liệu.

Nếu bạn cam kết, tất cả các tuyên bố trong giao dịch được hoàn tất và mọi người khác có thể thấy các hiệu ứng.

Nếu bạn quay trở lại, không có tuyên bố nào trong giao dịch được hoàn tất và không có thay đổi nào xảy ra với cơ sở dữ liệu.

Không phải tất cả các câu lệnh đều có thể là một phần của giao dịch, BTW. DDL (Tạo và Thả, ví dụ) sẽ kết thúc bất kỳ giao dịch trước đó nào.

4

Có, trong hoặc sau giao dịch bạn có thể sử dụng hàm last_insert_rowid().

Hàm last_insert_rowid() trả về ROWID của hàng cuối cùng được chèn từ kết nối cơ sở dữ liệu đã gọi hàm.

Nói cách khác:

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> 
Các vấn đề liên quan