SQLite
 sql >> база данни >  >> RDS >> SQLite

Как работи last_insert_rowid() в SQLite

SQLite има функция, наречена last_insert_rowid() който връща ROWID на последния ред вмъкнат от връзката към базата данни, която е извикала функцията.

Пример

Ето пример, за да демонстрирате как last_insert_rowid() функцията работи в SQLite.

Първо, нека създадем таблица и да вмъкнем някои данни:

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

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

Това автоматично ще създаде ROWID за всеки ред. Следователно този SQL оператор би създал три различни ROWID; 1, 2 и 3.

Вече можем да използваме last_insert_rowid() функция за връщане на стойността на последния ROWID.

SELECT last_insert_rowid();

Резултат:

3

Както се очакваше, последният ROWID е 3.

Вмъкване в различна таблица

Обърнете внимание, че last_insert_rowid() работи въз основа на връзка с база данни, а не на ниво таблица.

Следователно, ако създам нова таблица, след това вмъквам редове в тази таблица, last_insert_rowid() стойността ще се основава на това операция вмъкване.

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

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

SELECT last_insert_rowid(); 

Резултат:

2

Като странична бележка, когато създавах таблиците, дефинирах първите колони като колони с автоматично увеличение. Това беше дефинирано имплицитно, когато използвах INTEGER PRIMARY KEY .

Следователно, когато избера всички редове, мога да видя, че последният ред съдържа last_insert_rowid() стойност в тази колона.

SELECT * FROM Dogs;

Резултат:

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

В SQLite колона с тип INTEGER PRIMARY KEY е псевдоним за ROWID.

Следната заявка демонстрира това.

SELECT 
  rowid,
  * 
FROM Dogs;

Резултат:

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

Имайте предвид, че е възможно да създадете колона без да използвате вградената функция за автоматично нарастване на SQLite. Ако направите това, колоната ви „ID“ може да има различна стойност от стойността ROWID.

Възможно е също така да замените стойността за автоматично увеличение със собствена изрична стойност. В този случай обаче стойността ROWID все още ще отразява тази изрична стойност.

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

SELECT 
  rowid,
  * 
FROM Dogs;

SELECT last_insert_rowid();

Резултат:

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

И разбира се, last_insert_rowid() ще отразява и тази последна стойност на ROWID.

SELECT last_insert_rowid();

Резултат:

789

Какво е ROWID?

ROWID е 64-битов подписан целочислен ключ, който уникално идентифицира реда в неговата таблица. Всички таблици в SQLite имат ROWID, освен ако таблицата не е дефинирана с помощта на WITHOUT ROWID .

Достъпът до стойността на ROWID може да се осъществи с помощта на едно от независимите от специалния регистър имена rowid , oid или _rowid_ на мястото на име на колона. Ако таблица съдържа дефинирана от потребителя колона, използваща едно от тези имена, тогава това име винаги препраща към изрично декларираната колона и не може да се използва за извличане на целочислената стойност ROWID.

Когато дефинирате таблица с колона с автоматично увеличение, тази колона автоматично използва стойността ROWID за своя ред.

Вижте как работи AUTOINCREMENT в SQLite за повече информация.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използвайте Firebase DB с локална DB

  2. Как да синхронизирам с локална база данни и да анализирам?

  3. Извежда резултати от SQLite заявка като INSERT оператор

  4. SQLite - JOIN изявления

  5. Android със стая - Как да зададете нула на външен ключ