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命令。
你为什么不把桌子截断呢?您将删除所有未插入的行。我必须更新值,因为我需要它们之间的差异。还有一个。若我截断表并插入新表,我将丢失一段时间的数据。这太重要了,我必须先删除,然后再插入/更新数据。是吗?没关系,因为主键用于更新/插入和删除记录。