gpt4 book ai didi

mysql - 如何在1个查询中插入和删除记录?

转载 作者:行者123 更新时间:2023-11-29 14:02:24 24 4
gpt4 key购买 nike

嗨,我想构建一个(关注/取消关注)按钮,

如果记录不存在,则应通过在表中“添加”记录来跟随页面{表列是 UserID 和 PageID}

或者如果记录已存在,则通过从表中“删除”该记录来取消关注页面

我知道我可以通过创建 2 个查询在 PHP 代码中处理这个问题,但我想知道是否可以使用“if 语句”或其他内容通过 1 个查询来完成此操作!!

提前致谢。

最佳答案

在 Oracle 中,您可以使用 MERGE声明 DELETE子句,考虑:

SQL> create table foo(userid number, pageid number, dummy number);

Table created

SQL> CREATE OR REPLACE PROCEDURE follow(p_userid NUMBER, p_pageid NUMBER) IS
2 BEGIN
3 MERGE INTO foo f
4 USING (SELECT p_userid userid, p_pageid pageid FROM dual) i
5 ON (f.userid = i.userid AND f.pageid = i.pageid)
6 WHEN MATCHED THEN
7 UPDATE SET f.dummy = NULL
8 DELETE WHERE 1 = 1
9 WHEN NOT MATCHED THEN
10 INSERT (userid, pageid) VALUES (i.userid, i.pageid);
11 END;
12 /

Procedure created

需要虚拟列,因为 MERGE 语句无法更新连接列(在 ON 子句中)和 UPDATE 子句是必要的。运行该语句两次将删除该行:

SQL> exec follow(1, 1);

PL/SQL procedure successfully completed

SQL> select * from foo;

USERID PAGEID DUMMY
---------- ---------- ----------
1 1

SQL> exec follow(1, 2);

PL/SQL procedure successfully completed

SQL> select * from foo;

USERID PAGEID DUMMY
---------- ---------- ----------
1 1
1 2

SQL> exec follow(1, 1);

PL/SQL procedure successfully completed

SQL> select * from foo;

USERID PAGEID DUMMY
---------- ---------- ----------
1 2

关于mysql - 如何在1个查询中插入和删除记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14871809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com