当前位置: 首页 > 面试题库 >

SQL:如果不存在,如何更新或插入?

壤驷承
2023-03-14
问题内容

我在下面有一个SQL插入程序,它工作正常,但是我希望它检查DATE = xxxx,NAME = xxxx和JOB =
xxx并更新HOURS(如果它们存在),否则插入新行。SQL可以做到这一点吗?

"INSERT INTO TABLE (NAME, DATE, JOB, HOURS) VALUES ('BOB', '12/01/01', 'PM','30');

尝试以下具有相同结果的OR替换,每次都会添加一个新行。

add_time = conn.prepareStatement("INSERT OR REPLACE INTO RESOURCE (NAME, DATE, JOB, HOURS) VALUES ('"+name+"', '" + date + "', '"+job+"','"+hours+"');");

例如:

如果以下内容位于数据库中,并且John要更新其工作时间,它将检查名称,日期,作业是否与尝试插入的值相同,并且它们是否仅更新HOURS。否则,如果它们都不同时存在(John可能将小时数记录在另一个DATE或JOB上),则插入新行。

另外,其他人也将其小时数和不同角色记录在同一数据库中,如下所示。

约翰| 2012年12月12日| 清洁剂| 20约翰| 2012年12月12日| 首席执行官| 10吉姆| 2011年12月10日| 清洁剂| 5


问题答案:

您可以这样使用REPLACE INTO

REPLACE INTO mytable (NAME, DATE, JOB, HOURS)
VALUES ('BOB', '12/01/01', 'PM','30')

但是,您必须为此创建唯一的索引:

CREATE UNIQUE INDEX myindex
ON mytable(NAME, DATE, JOB)

请注意,对于唯一索引,应使用此类字段组合,以确定两个行是否被视为相同,应替换而不是插入。

SQLFiddle演示。

请注意,如果您注释掉唯一html" target="_blank">索引创建,它将停止正常工作。



 类似资料:
  • 我想向数据库表中添加一行,但如果存在具有相同唯一键的行,我想更新该行。 我的问题是: 但是,它将继续插入新的记录。假设是唯一键。如果存在,则不会将新记录插入数据库;同时更新记录。 我也试过这个: 我不确定我的代码是否存在for循环问题。 我使用for循环插入所有数据。 这是echo$query的输出; SQL表

  • 问题内容: 我想向数据库表中添加一行,但是如果存在具有相同唯一键的行,我想更新该行。 例如: 假设唯一键为,并且在我的 数据库 中有一行。在这种情况下,我想用这些值更新该行。通常,这会产生错误。 如果使用它,将忽略该错误,但仍不会更新。 问题答案: 采用 查询:

  • 问题内容: 我有一个带有2个表的数据库,如下所示: 列是,并且是 和 在申请表中,我有2个编辑框,名称分别为和 如果用户像电子邮件一样插入一个新的负责人姓名, 那么在保存表格的过程中,我想将新的负责人姓名插入表中,请插入最后一个并将其更新为。 如果用户保持名称,但它更新电子邮件一样,然后我想在从1 =使用新的电子邮件地址和他们(其余和)保持不变。 如果负责人的名称相同,我想保留from表的原始引用

  • 问题内容: 我有下表的计数器: 我想增加一个计数器,如果相应的行还不存在,则将其设置为零。有没有办法在标准SQL中没有并发问题的情况下做到这一点?该操作有时是事务的一部分,有时是独立的。 如果可能,SQL必须在SQLite,PostgreSQL和MySQL上未经修改地运行。 搜索产生了一些想法,这些想法可能遇到并发问题,或者特定于数据库: 尝试到新行,如果有错误。不幸的是,该错误会中止当前事务。

  • 问题内容: 我想要做的就是在我的数据库的用户,但它应该排,一个新行。 Ofcourse我连接到数据库第一和的,并从URL字符串。 可以,但是只添加新行; 这是我尝试过的; 和 和 但是它们都不起作用,我在做什么错? 任何帮助是极大的赞赏! 问题答案: 如果不存在约束,请在您的列上创建约束: 用途: (subs_name, subs_email, subs_birthday) VALUES (?,

  • 问题内容: 有没有一种简单的方法可以使用一个MySQL查询对不存在的行或存在的行进行简单的处理? 问题答案: 是的。例如: