1. ホーム
  2. sqlite

sqlite - INSERT OR IGNORE を動作させる方法

2023-12-25 16:05:46

質問

テーブルにデータを挿入しようとしています。私は、列がすでにデータを持っていない場合、行を挿入したいと思います - 他の列に関係なく。

CREATE TABLE t (
    id          INTEGER PRIMARY KEY,
    name        VARCHAR,
    other       INT
);
INSERT OR IGNORE INTO t (name) VALUES ('a');
INSERT OR IGNORE INTO t (name) VALUES ('a');
INSERT OR IGNORE INTO t (name) VALUES ('a');

上記のスニペットでは、私が考えていたような1行ではなく、3行になってしまいます。重要なのは、実際のSQLが INSTEAD OF INSERT トリガーの中で起こっています。

どのように解決するのですか?

置き換える

CREATE TABLE t (
    id          INTEGER PRIMARY KEY,
    name        VARCHAR,
    other       INT
);

CREATE TABLE t (
    id          INTEGER PRIMARY KEY,
    name        VARCHAR UNIQUE,
    other       INT
);

すると、次のようになります。

sqlite> CREATE TABLE t (
   ...>     id          INTEGER PRIMARY KEY,
   ...>     name        VARCHAR UNIQUE,
   ...>     other       INT
   ...> );
sqlite> INSERT OR IGNORE INTO t (name) VALUES ('a');
sqlite> INSERT OR IGNORE INTO t (name) VALUES ('a');
sqlite> INSERT OR IGNORE INTO t (name) VALUES ('a');
sqlite> select * from t ;
1|a|