Mysql 如何在1个查询中插入和删除记录?
嗨,我想建立一个(跟随/取消跟随)按钮 如果记录不存在,{table columns is UserID and PageID}应在页面后面通过“在表{table columns is UserID and PageID}中添加”记录 或者,如果记录已经存在,则通过“从表中删除该记录”来取消页面的后续操作 我知道我可以在PHP代码中通过创建2个查询来处理这个问题,但我想知道我是否可以使用“if statt”或其他方法通过1个查询来处理这个问题Mysql 如何在1个查询中插入和删除记录?,mysql,sql-server,database,oracle,Mysql,Sql Server,Database,Oracle,嗨,我想建立一个(跟随/取消跟随)按钮 如果记录不存在,{table columns is UserID and PageID}应在页面后面通过“在表{table columns is UserID and PageID}中添加”记录 或者,如果记录已经存在,则通过“从表中删除该记录”来取消页面的后续操作 我知道我可以在PHP代码中通过创建2个查询来处理这个问题,但我想知道我是否可以使用“if statt”或其他方法通过1个查询来处理这个问题 提前谢谢。据我所知,你不能直接做。作为工作区,根据查
提前谢谢。据我所知,你不能直接做。作为工作区,根据查询的方式,可以在同一句话中使用分号作为分隔符启动两个查询 当然,您始终可以使用存储过程
然而,我不认为这种解决方案是好的实践。将两个查询保持在同一事务中,并从业务层调用它。这将使我在将来更加容易理解。假设您要添加到或从中删除的表名为
User\u Page
IF EXISTS (SELECT * FROM User_Page WHERE USerID = @userID and PageID = @PageID)
BEGIN
DELETE FROM User_Page WHERE USerID = @userID and PageID = @PageID
END
ELSE
BEGIN
INSERT INTO User_Page (UserID, PageID) VALUES (@userID, @pageID)
END
在Oracle中,可以将语句与子句一起使用,请考虑:
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
语句无法更新join列(在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
这是在SQL/Server和/或Oracle上实现的吗?您已经标记了。和MySQL。说真的,所有这些问题都是针对每种可能的语言/平台的吗?