0

私はこのクエリを持っています:

 @db.execute("CREATE TABLE IF NOT EXISTS programs(programId INTEGER PRIMARY KEY NOT NULL 
     AUTOINCREMENT, programName TEXT NOT NULL, episodeName TEXT, UNIQUE(programName, 
     episodeName) ON CONFLICT IGNORE)")

これを無視する代わりに、私のテーブルのいずれかに競合がある場合、データを「競合」テーブルに挿入することを望みます。このシナリオを設定するにはどうすればよいですか? 明らかに競合テーブルを作成する必要がありますが、次は何ですか?

ありがとう

4

1 に答える 1

1

これを探していますか?

テーブル

CREATE TABLE programs
(
  programId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
  programName TEXT NOT NULL, 
  episodeName TEXT, 
  UNIQUE(programName, episodeName) ON CONFLICT IGNORE
);
CREATE TABLE program_dupes
(
  programId INTEGER, 
  programName TEXT, 
  episodeName TEXT 
);

引き金

CREATE TRIGGER tg_programs_insert
BEFORE INSERT ON programs
FOR EACH ROW
BEGIN
  INSERT INTO program_dupes (programId, programName, episodeName)
  SELECT programId, NEW.programName, NEW.episodeName
    FROM programs
   WHERE programName = NEW.programName 
     AND episodeName = NEW.episodeName;

END

これがSQLFiddleのデモです

于 2013-07-25T03:50:59.897 に答える