2 回答
TA贡献1921条经验 获得超9个赞
在深入挖掘之后,我发现了 Derek Dieter 的这篇文章,它描述了如何将 SQL Server 的 IF EXISTS ELSE 替换为 WHERE EXISTS:
https://sqlserverplanet.com/optimization/avoiding-if-else-by-using-where-exists
MySQL和MSSQL 中的WHERE EXISTS 语法似乎相同。
Derek Dieter 的例子,如果存在:
IF NOT EXISTS (SELECT 1 FROM customer_totals WHERE cust_id = @cust_id)
BEGIN
INSERT INTO customer_totals
(
cust_id,
order_amt
)
SELECT
cust_id = @cust_id
,order_amt = @order_amt
END
ELSE
UPDATE customer
SET order_amt = order_amt + @order_amt
WHERE cust_id = @cust_id
END
Derek Dieter 的例子,在 WHERE EXISTS 中:
INSERT INTO customer_totals
(
cust_id,
order_amt
)
SELECT TOP 1 — important since we’re not constraining any records
cust_id = @cust_id
,order_amt = @order_amt
FROM customer_totals ct
WHERE NOT EXISTS — this replaces the if statement
(
SELECT 1
FROM customer_totals
WHERE cust_id = @cust_id
)
SET @rowcount = @@ROWCOUNT — return back the rows that got inserted
UPDATE customer
SET order_amt = order_amt + @order_amt
WHERE @rowcount = 0
AND cust_id = @cust_id — if no rows were inserted, the cust_id must exist, so update
不过,我仍然需要在 MySQL 中对其进行测试。如果可行,我将更新这篇文章并添加代码。
TA贡献1852条经验 获得超7个赞
如果您使用的是 PHP,那么您正在通过接口调用代码。您可以执行以下操作:
在 上创建唯一索引
ip_address
。尝试插入新行。如果该行已经存在,这将失败。
如果插入失败(特别是重复键错误),则更新现有行。
但是,您尝试在两个数据库中使用相同代码的目标是 . . . 只是不会很好地工作。这两个数据库是相当不同的。也许您应该考虑在每个数据库中构建存储过程来执行您想要的操作,然后调用这些存储过程。
- 2 回答
- 0 关注
- 341 浏览
添加回答
举报