所以我想尝试遵循这个tutorial
做了这样的查询(“我无法工作......”)
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 (...)
这样做的好处应该是避免两次索引搜索。
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
任何人都可以告诉我什么是布莱恩并且可能告诉我我做错了什么?
答案 0 :(得分: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);
这假设您在列上有一个您不想重复的唯一索引。