每当我对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'));
我可能做错了什么?感谢
答案 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
。