2

我正在使用SQlite处理 HTML5 + PhoneGap 应用程序

用于更新 SQlite 中的表;我正在使用REPLACE INTO方法。

这是示例代码;:http://www.sqlfiddle.com/#!7/ccc33/2

架构

CREATE TABLE mytable (
id integer primary key autoincrement,
name VARCHAR(10),
date DATE,
job VARCHAR(16),
hours VARCHAR(16)
);
CREATE UNIQUE INDEX myindex ON mytable(NAME);

这里NAME是唯一索引值。

询问

REPLACE INTO mytable (NAME, DATE, JOB, HOURS)

VALUES ('BOB', '12/01/01', 'PM','20');

REPLACE INTO mytable (NAME, DATE, JOB, HOURS)

VALUES ('BOB', '12/01/01', 'PM','32');

REPLACE INTO mytable (NAME, DATE, JOB, HOURS)

VALUES ('BOB', '14/01/01', 'PM','35');

REPLACE INTO mytable (NAME, DATE, JOB, HOURS)

VALUES ('BOBg', '12/01/01', 'PM','350');

SELECT * FROM mytable;

但是当运行查询时;我看到主键id增加了在此处输入图像描述但是当NAME 相同时,我需要它唯一的更新。

有什么解决办法吗?请帮忙!

4

2 回答 2

1

在您的查询中,当 (NAME、DATE、JOB、HOURS) 或其组合存在唯一约束并且违反了该约束时,记录将被删除并插入新值。所以 key id 递增

如果你想做类似的事情并且 UPSERT 这样做:

INSERT OR REPLACE INTO mytable (id, NAME, Date, JOB, HOURS)
 SELECT old.id, new.NAME, new.Date, new.JOB, new.HOURS
 FROM ( SELECT
     'BOB' AS name,
     '12/01/01' AS NAME,
     'PM'  AS JOB,
     '32'  AS JOB
 ) AS new
 LEFT JOIN (
     SELECT id, NAME, Date, JOB, HOURS
     FROM mytable
 ) AS old ON new.NAME= old.NAME;
于 2014-03-18T13:36:12.843 回答
0

创建 id 列时不要编写自动增量。

http://sqlite.org/autoinc.html

于 2014-03-18T13:29:02.877 回答