Sql 如果不存在-Mariadb语法
我试图插入一个新行,或者更新一个已经包含的现有行 我想我可以尝试使用索引,但老实说,我不知道如何做到这一点,因此我尝试使用IF语句。 不幸的是,这也不起作用,因为它说我的语法有问题。我正在使用MariaDBSql 如果不存在-Mariadb语法,sql,mariadb,exists,Sql,Mariadb,Exists,我试图插入一个新行,或者更新一个已经包含的现有行 我想我可以尝试使用索引,但老实说,我不知道如何做到这一点,因此我尝试使用IF语句。 不幸的是,这也不起作用,因为它说我的语法有问题。我正在使用MariaDB IF NOT EXISTS (SELECT * FROM valuation WHERE ticker = 'BK001EUR' AND depot_id =1 AND src_id =2 AND valuation_dat
IF NOT EXISTS (SELECT * FROM valuation
WHERE ticker = 'BK001EUR' AND depot_id =1
AND src_id =2 AND valuation_date ='2009-09-09')
INSERT INTO valuation (ticker,depot_id,src_id,valuation_date,value)
VALUES ('BK001EUR',1,2,'2009-09-09',14999260.46)
ELSE
UPDATE valuation
SET value =14999260.46
WHERE ticker = 'BK001EUR' AND depot_id =1
AND src_id =2 AND valuation_date ='2009-09-09');
您可以使用:
-- if exists then it will update
UPDATE valuation
SET value =14999260.46
WHERE ticker = 'BK001EUR'
AND depot_id =1 AND src_id =2 AND valuation_date ='2009-09-09';
-- if not exist then insert
INSERT INTO valuation (ticker,depot_id,src_id,valuation_date,value)
SELECT 'BK001EUR',1,2,'2009-09-09',14999260.46
WHERE NOT EXISTS (SELECT 1
FROM valuation
WHERE ticker = 'BK001EUR'
AND depot_id =1
AND src_id =2 AND valuation_date ='2009-09-09');
或者更好的方式:
正确的方法是使用插入。。。在重复密钥更新时。我将把查询写为:
INSERT INTO valuation (ticker, depot_id, src_id, valuation_date, value)
VALUES ('BK001EUR', 1, 2, '2009-09-09', 14999260.46)
ON DUPLICATE KEY UPDATE value = VALUES(value);
注意使用值,这样就不必重复输入
要使其正常工作,您需要在所关心的键上创建一个唯一索引:
create unique index unq_valuation_4 on valuation(ticker, depot_id, src_id, valuation_date);
重复键不需要是主键索引。
它可以是任何唯一的索引。我尝试了重复键更新,但不幸的是,它只与主键相关,主键是ticker,我不知道如何将它与基于所有4列的索引相关联。更新估值集值=14999260.46,其中ticker='BK001EUR'和src_id=2,depot_id=1和估值_date='2009-09-09';插入估价单,仓库id,src id,估价单日期,价值选择'BK001EUR',1,2,'2009-09-09',14999260.46如果不存在,从估价单中选择1,其中,股票代码为'BK001EUR',仓库id=1,src id=2,估价单日期为'2009-09-09';
create unique index unq_valuation_4 on valuation(ticker, depot_id, src_id, valuation_date);