gpt4 book ai didi

mysql - SQL - 如果不存在则插入行,如果存在问题则更新行

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

所以我试图遵循这个tutorial

Insted 执行这​​样的查询(“我也无法开始工作......”)

IF EXISTS (SELECT * FROM Table1 WHERE Column1='SomeValue')
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
ELSE
INSERT INTO Table1 VALUES (...)

我想这样做

UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
INSERT INTO Table1 VALUES (...)

这样做的好处应该是避免两次索引搜索。

enter image description here

SQL

UPDATE ctc_portfolio_coins SET (ctc_portfolio_coins_amount = 100) WHERE ctc_portfolio_coins_portfolio_fk = 1
IF @@ROWCOUNT=0
INSERT INTO ctc_portfolio_coins (ctc_portfolio_coins_portfolio_fk, ctc_portfolio_coins_coin_fk, ctc_portfolio_coins_amount) VALUES (1, 1, 100)

错误

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(ctc_portfolio_coins_amount = 100) WHERE ctc_portfolio_coins_portfolio_fk=1
IF ' at line 1

谁能告诉我发生了什么事,或者告诉我我做错了什么?

最佳答案

在 MySQL 中实现原始查询的正确方法是使用 ON DUPLICATE KEY UPDATE 以及唯一索引:

CREATE UNIQUE INDEX idx_table1_column1 ON table1(column1);

INSERT INTO table1(col1, . . . )
VALUES ( . . . )
ON DUPLICATE KEY UPDATE col1 = VALUES(col1), . . .;

您不应该学习 IF EXISTS 公式。由于竞争条件,它的性能较差——两个线程同时尝试类似的操作。

对于您的特定查询,@@ROWCOUNT 不是 MySQL 的一部分。您的查询将被表述为:

INSERT INTO ctc_portfolio_coins (ctc_portfolio_coins_portfolio_fk, ctc_portfolio_coins_coin_fk, ctc_portfolio_coins_amount)
VALUES (1, 1, 100)
ON DUPLICATE KEY UPDATE ctc_portfolio_coins_amount = VALUES(ctc_portfolio_coins_amount);

这假设您在不希望重复的列上有一个唯一索引。

关于mysql - SQL - 如果不存在则插入行,如果存在问题则更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46264170/

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