SQLite | SQLite関数 | 直前のSQL文で変更された行数を取得する(changes関数)
changes()関数は、直前に実行したSQL文で追加、更新、削除された行数を返します。ここでは、その使い方を説明します。
接続後に変更された行数の合計を取得するには、total_changes()関数を使用します。
changes関数の使い方
changes()は、直前のINSERT、UPDATE、DELETEで処理された行数を取得します。構文は次のとおりです。
changes()
INSERT、UPDATE、DELETEで実際に処理されたテーブル行の数を返します。
–
実際に試してみます。次のテーブルを作成します。
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()で直前のINSERT、UPDATE、DELETEが処理した行数を取得できます。