INSERT 或 REPLACE 正在创建重复项 [英] INSERT or REPLACE is creating duplicates

查看:18
本文介绍了INSERT 或 REPLACE 正在创建重复项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

每当我对 sqlite3 执行插入或替换"命令时,它实际上是创建重复条目而不是覆盖现有条目.

Whenever I execute an "INSERT OR REPLACE" command to sqlite3, it's actually create duplicate entries instead of overwriting the existing entries.

我使用以下命令在 sqlite3 中创建了表:

I created the table in sqlite3 with the following command:

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'));

我可能做错了什么?谢谢

What could I be doing wrong? Thanks

推荐答案

您应该在 create 语句中指定哪些列集应该是唯一的"——例如

You should specify in your create statement what set of columns should be `unique' -- for example

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> 

这篇关于INSERT 或 REPLACE 正在创建重复项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆