SQLite | SQLite関数 | 接続後に変更された行の総数を取得する(total_changes関数)

total_changes()関数は、データベース接続後に追加、更新、削除された行の総数を返します。ここでは、その使い方を説明します。

直前のSQL文だけで変更された行数を取得するには、changes()を使用します。

 

total_changes関数の使い方

total_changes()は、現在の接続でINSERTUPDATEDELETEが処理した行の総数を取得します。構文は次のとおりです。

total_changes()

接続後に実際に処理されたテーブル行の累計を返します。

例を試すためにデータベースへ接続します。

$ sqlite3 total_changes.sqlite3
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
sqlite> 

次のテーブルを作成します。

create table user (id integer, name text, address text);
sqlite> create table user (id integer, name text, address text);
sqlite> 

1行を追加します。

insert into user values (1, 'devkuma', 'Seoul');
sqlite> insert into user values (1, 'devkuma', 'Seoul');
sqlite> 

total_changes()でこれまでに処理された行数を取得します。

select total_changes ();

接続後に追加されたのは1行なので、total_changes()1を返します。

sqlite> .mode column
sqlite> .header on
sqlite> 
sqlite> select total_changes();
total_changes()
---------------
1              
sqlite> 

さらに7行を追加します。

insert into user values (2, 'kimkc', 'Busan');
insert into user values (3, 'araikuma', 'Paju');
insert into user values (4, 'happykuma', 'Paju');
insert into user values (5, 'mykuma', 'Daejeon');
insert into user values (6, 'yourkuma', 'Seongnam');
insert into user values (7, 'raccoon', 'Suwon');
insert into user values (8, 'noguri', 'Suwon');
sqlite> insert into user values (2, 'kimkc', 'Busan');
sqlite> insert into user values (3, 'araikuma', 'Paju');
sqlite> insert into user values (4, 'happykuma', 'Paju');
sqlite> insert into user values (5, 'mykuma', 'Daejeon');
sqlite> insert into user values (6, 'yourkuma', 'Seongnam');
sqlite> insert into user values (7, 'raccoon', 'Suwon');
sqlite> insert into user values (8, 'noguri', 'Suwon');
sqlite> 

もう一度total_changes()を呼び出します。

select total_changes();

接続後に追加された行は合計8行なので、関数は8を返します。

total_changes関数の使用(6)
sqlite> select total_changes();
total_changes()
---------------
8              
sqlite> 

次に一部の行を更新します。

update user set address = 'suwon' where address = 'Suwon';
sqlite> update user set address = 'suwon' where address = 'Suwon';
sqlite> 

2行を更新したため累計は8から10になり、total_changes()10を返します。

select total_changes();
sqlite> select total_changes();
total_changes()
---------------
10             
sqlite> 

このように、total_changes()で接続中にINSERTUPDATEDELETEが処理した行の累計を取得できます。