SQL:如何更新或插入如果不存在?
问题描述:
我有一个SQL插入下面,它工作正常,但我希望它检查如果DATE = xxxx,NAME = xxxx和JOB = xxx并更新HOURS,如果它们存在,否则插入新行。这可能与SQL?SQL:如何更新或插入如果不存在?
"INSERT INTO TABLE (NAME, DATE, JOB, HOURS) VALUES ('BOB', '12/01/01', 'PM','30');
尝试使用下面的OR REPLACE或相同的结果,每次都会添加一个新行。
add_time = conn.prepareStatement("INSERT OR REPLACE INTO RESOURCE (NAME, DATE, JOB, HOURS) VALUES ('"+name+"', '" + date + "', '"+job+"','"+hours+"');");
例如:
如果下面是在数据库中,约翰想更新自己的时间,它会检查名称,日期,工作都是一样的值试图插入,如果他们只是更新HOURS。否则,如果它们中的任何一个都不存在(John可能有几个小时针对另一个DATE或JOB记录)插入一个新行。
另外其他人也将在同一个DB中记录他们的小时和不同的角色,如下所示。
John | 12/12/2012 |清洁剂| 20 John | 12/12/2012 | ceo | 10 Jim | 12/10/2011 |清洁剂| 5
答
您可以使用REPLACE INTO
这样的:
REPLACE INTO mytable (NAME, DATE, JOB, HOURS)
VALUES ('BOB', '12/01/01', 'PM','30')
但是,您必须创建唯一索引f或者这个工作:
CREATE UNIQUE INDEX myindex
ON mytable(NAME, DATE, JOB)
注意,你应该使用唯一索引字段将确定两行被认为是相同的,应予以更换,而不是插入的这样的组合。
请注意,如果您注释掉了独特的索引创建,它会stops working correctly。
答
我觉得这已经在这里问过SQLite的:
INSERT IF NOT EXISTS ELSE UPDATE?
好像他们有专门的语法:
INSERT OR REPLACE INTO TABLE (NAME, DATE, JOB, HOURS) VALUES ('BOB', '12/01/01', 'PM','30');
是的,即使通过整体的方法,我最好的选择是'UNIQUE()'约束。 – Najzero 2013-02-11 07:16:23