INSERT或REPLACE正在创建重复项

时间:2011-07-18 23:43:07

标签: php sqlite

每当我对sqlite3执行“INSERT OR REPLACE”命令时,它实际上是创建重复的条目而不是覆盖现有的条目。

我使用以下命令在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 个答案:

答案 0 :(得分:6)

您应该在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 :(得分:1)

不要那样做。你应该指定PK。

执行初始INSERT,然后执行UPDATE