Mysql 在一个查询中插入、删除、更新
我有下表Mysql 在一个查询中插入、删除、更新,mysql,sql-insert,sql-delete,Mysql,Sql Insert,Sql Delete,我有下表 id val match_id oddname_id dif 1 1.75 401 1 0.25 //THIS ONE MUST BE DELETED. EXPLAINED BELOW 2 3.30 401 2 -0.20 3 5.00 401 3 0.00 4 1.13 401 4
id val match_id oddname_id dif
1 1.75 401 1 0.25 //THIS ONE MUST BE DELETED. EXPLAINED BELOW
2 3.30 401 2 -0.20
3 5.00 401 3 0.00
4 1.13 401 4 0.00
Id只是索引。主键是oddname_id和match_id
我从xml解析数据,下面是我必须做的:
如果主键不存在,则插入
当我有match_id=402和oddname_id=1时,我必须插入,因为match_id 402不存在
在重复密钥更新时
当我有match_id=401和oddname_id=1时,我必须只更新val和dif。dif等于val和它的新值之差
如果密钥不存在,我想删除所有数据
这是我的疑问;前两个语句很好,但我对如何使用第三个语句没有意见:
INSERT INTO odds
(match_id,oddname_id,val)
VALUES
('401','2','3.3'),
('401','3','5.0'),
('401','4','1.25'),
ON DUPLICATE KEY
UPDATE
dif = val-VALUES(val),
val = VALUES(val);
我想在此查询中添加如下内容:
IF KEY DOESN'T EXISTS DELETE.
在此示例中,它必须删除第一行:
id val match_id oddname_id dif
1 1.75 401 1 0.25
因为在插入时,我的值中没有401 match_id和1 oddname_id
将XML文件中的数据导入另一个临时表中——可以在MySQL 5.5中使用LOAD XML命令。
从赔率表中删除temp中不存在的记录。表-使用DELETE with JOIN命令。
使用temp中的数据插入/更新赔率表。表-使用INSERT…ON DUPLICATE KEY UPDATE命令。
你为什么不把桌子截断呢?您将删除所有未插入的行。我必须更新值,因为我需要它们之间的差异。还有一个。若我截断表并插入新表,我将丢失一段时间的数据。这太重要了,我必须先删除,然后再插入/更新数据。是吗?没关系,因为主键用于更新/插入和删除记录。