SQLite3構文 update
データの更新。
成果物
一覧
update set
create table T(A text); insert into T values('A'); update T set A='B'; select * from T;
B
update set () = ()
SQLite3.15.0以降、列名リストで行値をセットできる。
create table T(A integer, B text); insert into T values(1,'A'); update T set (A,B)=(2,'B'); select * from T;
2|B
update set where
create table T(A text); insert into T values('A'); insert into T values('B'); update T set A='C' where rowid=1; select * from T;
C B
conflict
rollback
制約違反のとき、更新せずロールバックする。
create table T(A text check(length(A)=1)); insert into T values('A'); insert into T values('B'); update or rollback T set A='AA' where rowid=1; select * from T;
Error: CHECK constraint failed: T
A
B
abort
制約違反のとき、更新せず中止して取り消す。
create table T(A text check(length(A)=1)); insert into T values('A'); insert into T values('B'); update or abort T set A='AA' where rowid=1; select * from T;
Error: CHECK constraint failed: T
A
B
replace
not null制約違反でdefault
がないとき、abortと同じ。
create table T(A text not null); insert into T values('A'); insert into T values('B'); update or replace T set A=NULL where rowid=1; select * from T;
Error: NOT NULL constraint failed: T.A A B
not null制約違反でdefault
があるとき、default
値に置き換える。
create table T(A text not null default 'DEF'); insert into T values('A'); insert into T values('B'); update or replace T set A=NULL where rowid=1; select * from T;
Error: NOT NULL constraint failed: T.A DEF B
check制約違反のとき、abortと同じ。
create table T(A text check(length(A)=1)); insert into T values('A'); insert into T values('B'); update or replace T set A='AA' where rowid=1; select * from T;
Error: CHECK constraint failed: T
A
B
外部キー制約違反のとき、abortと同じ。
create table U(id integer primary key); insert into U values(1); insert into U values(2); create table T(A integer references U(id)); insert into T values(1); insert into T values(2); update or replace T set A=0 where A=1; select * from T;
Error: FOREIGN KEY constraint failed 1 2
fail
制約違反が起こると中止する。その前までのはロールバックしない。それ以降は実行しない。
create table T(A text check(length(A)=1)); insert into T values('A'); insert into T values('B'); update or fail T set A='AA' where rowid=1; select * from T;
Error: CHECK constraint failed: T
A
B
でも、or fail
を付与したステートメントのみ対象っぽい。トランザクション全体が中止されるわけではないようだ。
create table T(A text check(length(A)=1)); begin; insert into T values('A'); insert into T values('B'); update or fail T set A='AA' where rowid=1; insert into T values('C'); end; select * from T;
Error: CHECK constraint failed: T
A
B
C
ignore
制約違反が起こると無視する。エラーも出ない。
create table T(A text check(length(A)=1)); insert into T values('A'); insert into T values('B'); update or ignore T set A='AA' where rowid=1; select * from T;
A B
order by limit offset
- SQLite_ENABLE_UPDATE_DELETE_LIMITコンパイルオプションがあるとき使える
- SQLite3をソースからビルドする(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
create table T(A text, B text); insert into T values('B','B'); insert into T values('D','D'); insert into T values('A','A'); insert into T values('C','C');
A
列を昇順にして先頭から1つ目を飛ばし、1件だけ更新。
update T set A='Z' order by A limit 1 offset 1; select * from T order by A;
A|A C|C D|D Z|B
A
列の値がB
のセルをZ
値に更新した。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- SQLite 3.29.0
- MeCab 0.996ユーザ辞書
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux
前回まで
- SQLite3学習 俯瞰まとめ
- SQLite3学習 環境構築まとめ
- SQLite3学習 インタフェースまとめ(C言語、CLI、対話モード、Tcl...)
- SQLite3学習 ドットコマンドまとめ
- SQLite3学習 JSON拡張まとめ
- SQLite3学習 FTSまとめ(ICU, MeCab)
- SQLite3学習 再帰クエリ(WITH RECURSIVE)
- SQLite3学習 R-Treeモジュール
- SQLite3学習 Geopoly(2次元ベクタ画像の生成)
- SQLite3学習 拡張関数(generate_series)
- SQLite3学習 拡張ライブラリ数学関数(extension-functions.c)
- SQLite3学習 謎と名前
- SQL文の分類(DDL,DML,TCL,DCL)
- SQL構文 alter(rename)
- SQL構文 alter(add column)概要
- SQL構文 alter(add column)制約
- SQL構文 alter(add column)sqlite_master変更しても反映されない
- SQL構文 alter(add column)スキーマ再定義(テーブル再作成による定義変更)
- SQL構文 analyze
- SQL構文 attach/detach
- SQLite3構文 begin,end,commit,rollback,savepoint(deferred,immediate,exclusive)
- SQLite3構文 コメント
- SQLite3構文 create/drop
- SQLite3構文 index(create/drop)
- SQLite3構文 table(create/drop)
- SQLite3構文 列制約(default)
- SQLite3構文 列制約(collate)
- SQLite3構文 列制約(primary key)
- SQLite3構文 列制約(primary key)ベストプラクティス
- SQLite3構文 列制約(unique)
- SQLite3構文 列制約(not null)
- SQLite3構文 列制約(check)
- SQLite3構文 列制約(foreign key references)
- SQLite3構文 表制約(primary key, unique, check, foreign key)
- SQLite3でメタデータを取得する方法(DB名(スキーマ名)、テーブル名、列名、制約)
- SQLite3でTEMPの保存先を指定する
- SQLite3構文 delete
- SQLite3ビルド失敗(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
- SQLite3をソースからビルドする(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
- SQLite3構文 delete(limit offset, order by)
- SQLite3クエリプランニング(インデックスの働き)
- SQLite3構文 explain
- SQLite構文 expression
- SQLite構文 expression(リテラル)
- SQLite構文 expression(パラメータ)
- SQLite構文 expression(演算子)
- SQLite構文 expression(like 句)
- SQLite構文 expression(glob 句)
- SQLite構文 expression(regexp 句)
- SQLite構文 expression(match 句)
- SQLite構文 expression(is 句)
- SQLite構文 expression(in 句)
- SQLite構文 expression(between 句)
- SQLite構文 expression(case 句)
- SQLite構文 expression(exists 句)
- SQLite構文 expression(サブクエリ)
- SQLite構文 expression(cast)
- SQLite構文 indexed by
- SQLite構文 insert
- SQLite構文 pragma
- SQLite構文 reindex
- SQLite構文 select