在一个查询中INSERT,DELETE,UPDATE

时间:2011-10-13 08:25:14

标签: 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         0.00

我只是索引。主键是 oddname_id match_id

我从xml解析数据,这是我必须做的事情:

  1. 如果PRIMARY KEY不存在则INSERT。

    当我有match_id = 402和oddname_id = 1时,我必须插入,因为match_id 402不存在。

  2. ON DUPLICATE KEY UPDATE。

    当我有match_id = 401和oddname_id = 1时,我必须只更新val和dif。 (dif等于val的差异和它的新值。

  3. 如果KEY不存在

  4. ,我想删除所有数据

    这是我的查询;前两个陈述工作正常,但我不知道如何让第三个陈述工作:

    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
    

    因为插入时我没有在VALUES中使用401(match_id)和1(oddname_id)。

1 个答案:

答案 0 :(得分:0)

  1. 从附加(临时)表中的XML文件导入数据 - 您可以在MySQL 5.5中使用LOAD XML命令。
  2. odds表中删除temp中不存在的记录。 table - 使用DELETE和JOIN命令。
  3. 使用temp中的数据插入/更新odds表。 table - 使用INSERT ... ON DUPLICATE KEY UPDATE命令。