SQL如何实现存在今日时间戳行则更新、不存在则新增的需求
SQL 插入更新(Upsert)需求实现方案
首先你需要先为date字段添加唯一索引,这是实现冲突判断的前提,语句如下:
CREATE UNIQUE INDEX idx_unique_date ON 你的表名(`date`);
不同数据库的实现语法
1. MySQL
直接使用INSERT ... ON DUPLICATE KEY UPDATE语法,示例如下(假设需要更新的price值为10.99,可替换为实际业务值):
INSERT INTO 你的表名 (price, `date`) VALUES (10.99, CURDATE()) ON DUPLICATE KEY UPDATE price = 10.99;
如果需要基于原有值做计算更新,比如今日价格上涨2元,可将UPDATE部分改为price = price + 2。
2. PostgreSQL / SQLite
使用INSERT ... ON CONFLICT语法实现:
INSERT INTO 你的表名 (price, "date") VALUES (10.99, CURRENT_DATE) ON CONFLICT ("date") DO UPDATE SET price = 10.99;
3. SQL Server
使用MERGE语法实现:
MERGE INTO 你的表名 AS target USING (VALUES (10.99, CAST(GETDATE() AS DATE))) AS source (price, [date]) ON target.[date] = source.[date] WHEN MATCHED THEN UPDATE SET target.price = source.price WHEN NOT MATCHED THEN INSERT (price, [date]) VALUES (source.price, source.[date]);
注意:所有语句中的
你的表名需要替换为实际数据表名称,price取值可根据业务需求调整,也可配合自定义变量使用。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

