2011-07-18 77 views
2

每當我對sqlite3執行「INSERT OR REPLACE」命令時,它實際上會創建重複項而不是覆蓋現有項。INSERT或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')); 

什麼可能我是做錯了什麼?謝謝

+1

它說REPLACE而不是REPACE,對不對?而且你在執行方法調用中缺少括號。 –

+0

是的,它確實說REPLACE,並且有一個括號;我應該複製並粘貼;) – Sam

+1

由於您的查詢不包含主鍵'a',SQLITE將如何知道這些數據不是新數據? –

回答

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

不要這樣做。你應該指定PK。

做一個初始的INSERT,然後做一個UPDATE