SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Cách last_insert_rowid () hoạt động trong SQLite

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

Ví dụ

Dưới đây là một ví dụ để minh họa cách last_insert_rowid() hàm hoạt động trong SQLite.

Trước tiên, hãy tạo một bảng và chèn một số dữ liệu:

CREATE TABLE Cats( 
    CatId INTEGER PRIMARY KEY, 
    CatName
);

INSERT INTO Cats VALUES 
    ( NULL, 'Brush' ),
    ( NULL, 'Scarcat' ),
    ( NULL, 'Flutter' );

Điều này sẽ tự động tạo ROWID cho mỗi hàng. Do đó, câu lệnh SQL này sẽ tạo ra ba ROWID khác nhau; 1, 2 và 3.

Bây giờ chúng ta có thể sử dụng last_insert_rowid() hàm để trả về giá trị của ROWID cuối cùng.

SELECT last_insert_rowid();

Kết quả:

3

Theo dự kiến, ROWID cuối cùng là 3.

Chèn vào một bảng khác

Lưu ý rằng last_insert_rowid() hoạt động dựa trên kết nối cơ sở dữ liệu, không phải ở cấp bảng.

Do đó, nếu tôi tạo một bảng mới, sau đó chèn các hàng vào bảng đó, last_insert_rowid() giá trị sẽ dựa trên that thao tác chèn.

CREATE TABLE Dogs( 
    DogId INTEGER PRIMARY KEY, 
    DogName
);

INSERT INTO Dogs VALUES 
    ( NULL, 'Yelp' ),
    ( NULL, 'Woofer' );

SELECT last_insert_rowid(); 

Kết quả:

2

Lưu ý thêm, khi tôi tạo các bảng, tôi đã xác định các cột đầu tiên là cột tự động tăng. Điều này được định nghĩa ngầm khi tôi sử dụng INTEGER PRIMARY KEY .

Do đó, khi tôi chọn tất cả các hàng, tôi có thể thấy rằng hàng cuối cùng chứa last_insert_rowid() giá trị trong cột đó.

SELECT * FROM Dogs;

Kết quả:

DogId       DogName   
----------  ----------
1           Yelp      
2           Woofer    

Trong SQLite, một cột có loại INTEGER PRIMARY KEY là bí danh cho ROWID.

Truy vấn sau đây chứng minh điều này.

SELECT 
  rowid,
  * 
FROM Dogs;

Kết quả:

DogId       DogId       DogName   
----------  ----------  ----------
1           1           Yelp      
2           2           Woofer    

Lưu ý rằng có thể tạo một cột mà không cần sử dụng tính năng tự động tăng mã SQLite có sẵn. Nếu bạn làm điều này, thì cột "ID" của bạn có thể có giá trị khác với giá trị ROWID.

Cũng có thể ghi đè giá trị tự động tăng thêm bằng giá trị rõ ràng của riêng bạn. Tuy nhiên, trong trường hợp này, giá trị ROWID sẽ vẫn phản ánh giá trị rõ ràng này.

INSERT INTO Dogs 
VALUES ( 789, 'Fluff' );

SELECT 
  rowid,
  * 
FROM Dogs;

SELECT last_insert_rowid();

Kết quả:

DogId       DogId       DogName   
----------  ----------  ----------
1           1           Yelp      
2           2           Woofer    
789         789         Fluff     

Và tất nhiên, last_insert_rowid() cũng sẽ phản ánh giá trị ROWID mới nhất này.

SELECT last_insert_rowid();

Kết quả:

789

ROWID là gì?

ROWID là một khóa số nguyên có dấu 64 bit xác định duy nhất hàng trong bảng của nó. Tất cả các bảng trong SQLite đều có ROWID trừ khi bảng được xác định bằng WITHOUT ROWID .

Giá trị ROWID có thể được truy cập bằng một trong các tên không phụ thuộc vào chữ hoa chữ thường rowid , oid hoặc _rowid_ thay cho tên cột. Nếu bảng chứa cột do người dùng xác định bằng một trong những tên đó, thì tên đó luôn tham chiếu đến cột được khai báo rõ ràng và không thể được sử dụng để truy xuất giá trị ROWID số nguyên.

Khi bạn xác định bảng có cột tự động tăng, cột đó sẽ tự động sử dụng giá trị ROWID cho hàng của nó.

Xem Cách AUTOINCREMENT hoạt động trong SQLite để biết thêm thông tin.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dữ liệu được điền từ ngày của một bảng cụ thể thay vì tất cả các bảng trong sqlite

  2. Phương pháp hay nhất để triển khai cơ sở dữ liệu an toàn cho thiết bị Android

  3. Mô phỏng ORDER BY trong SQLite UPDATE để xử lý ràng buộc về tính duy nhất

  4. Sử dụng chuỗi [] selectArgs trong SQLiteDatabase.query ()

  5. Chỉ thêm dữ liệu vào cơ sở dữ liệu sqlite một lần và đọc nhiều lần