SQLite | SQLite関数 | 直前のSQL文で変更された行数を取得する(changes関数)

changes()関数は、直前に実行したSQL文で追加、更新、削除された行数を返します。ここでは、その使い方を説明します。

接続後に変更された行数の合計を取得するには、total_changes()関数を使用します。

changes関数の使い方

changes()は、直前のINSERTUPDATEDELETEで処理された行数を取得します。構文は次のとおりです。

changes()

INSERTUPDATEDELETEで実際に処理されたテーブル行の数を返します。

実際に試してみます。次のテーブルを作成します。

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

次の行を追加します。

insert into user values (1, 'devkuma', 'Seoul');
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 (1, 'devkuma', 'Seoul');
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> 

追加後にchanges()を呼び出し、直前の文で処理された行数を取得します。

select changes();

複数のINSERTを実行しましたが、直前の文が追加したのは1行だけなので、changes()1を返します。

sqlite> create table user (id integer, name text, address text);
sqlite> 
sqlite> insert into user values (1, 'devkuma', 'Seoul');
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> 
sqlite> select changes();
1
sqlite> 

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

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

UPDATEが2行を変更したため、changes()2を返します。

select changes();
sqlite> update user set address = 'suwon' where address = 'Suwon';
sqlite> 
sqlite> select changes();
2
sqlite> 

次に一部の行を削除します。

delete from user where address = 'Paju';
sqlite> delete from user where address = 'Paju';
sqlite> 

DELETEが2行を削除したため、changes()2を返します。

select changes ();
sqlite> delete from user where address = 'Paju';
sqlite> 
sqlite> select changes();
2

このように、changes()で直前のINSERTUPDATEDELETEが処理した行数を取得できます。