INSERT или REPLACE создает дубликаты - PullRequest
2 голосов
/ 19 июля 2011

Всякий раз, когда я выполняю команду «INSERT OR REPLACE» для sqlite3, она фактически создает дублирующиеся записи вместо перезаписи существующих записей.

Я создал таблицу в sqlite3 с помощью следующей команды:

CREATE TABLE mytable (a INTEGER PRIMARY KEY, b VARCHAR(50), c BOOLEAN, d BOOLEAN, e INTEGER, f TEXT, g TEXT, h INTEGER, i DATETIME);

И затем я выполняю это:

$database = new POD("sqlite:mydatabase.db");
$database->prepare("INSERT OR REPLACE INTO mytable (b, c, d, e, f, h, h, i) values(?, ?, ?, ?, ?, ?, ?, ?)")
$database->execute('test', 0, 1, -1, 'test', 'test', 12, strtotime('now'));

Что я могу делать неправильно?Спасибо

Ответы [ 2 ]

6 голосов
/ 19 июля 2011

Вы должны указать в своем выражении create, какой набор столбцов должен быть "уникальным" - например,

CREATE TABLE mytable (a INTEGER PRIMARY KEY, b VARCHAR(50), c BOOLEAN, d BOOLEAN,
                      e INTEGER, f TEXT, g TEXT, h INTEGER, i DATETIME,
                      UNIQUE (b,c));

Теперь

sqlite> insert or replace into mytable (b,c,d,e,f,g,h,i) values    ('foo',1,1,2,'bar','baz',3,'2011-07-19');
sqlite> select * from mytable;
2|foo|1|1|2|bar|baz|3|2011-07-19
sqlite> insert or replace into mytable (b,c,d,e,f,g,h,i) values ('foo',1,1,2,'bar','baz',4,'2011-07-19');
sqlite> select * from mytable;
3|foo|1|1|2|bar|baz|4|2011-07-19
sqlite> 
1 голос
/ 19 июля 2011

Не делай этого.Вы должны указать PK.

Сделайте начальный INSERT, затем сделайте UPDATE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...