使用 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 是UNIQUE INDEX值。
查询
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 相同时我需要它的唯一更新。
这有什么解决方案吗?请帮忙!
答案 0 :(得分:1)
在查询中(NAME,DATE,JOB,HOURS)或它们的组合存在唯一约束时,如果违反了该记录,则会删除记录并使用新值插入记录。所以密钥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;
答案 1 :(得分:0)
创建id列时不要写自动增量。