2017-06-05 52 views
0

我需要一些幫助來在MySQL中創建一個程序。插入和更新MySQL程序

我有兩個表:

  1. 連接
  2. connection_temporary

我想創建做了程序:

  • 如果SELECT keyname FROM connection WHERE keyname NOT IN (SELECT keyname FROM connection_temporary)更新connection.connection_status離線
  • 如果SELECT keyname FROM connection_temporary WHERE keyname NOT IN (SELECT keyname FROM CONNECTION)插入與connection_temporary的行內容

我怎樣才能做到這一點與connection_temporary的行內容

  • 如果SELECT keyname, real_ip, virtual_ip, received_bytes, sent_bytes, connection_tstamp FROM connection_temporary WHERE keyname IN (SELECT keyname FROM CONNECTION)更新連接連接?

  • +0

    你嘗試過這麼遠嗎? – Blank

    +0

    'SET some_var =(SELECT keyname,real_ip,virtual_ip,received_bytes,sent_bytes,connection_tstamp FROM connection_temporary WHERE keyname IN(SELECT keyname FROM CONNECTION));' – Cesar

    +0

    程序內部。但我不知道我怎麼能做到我想要的。 – Cesar

    回答

    0

    你應該張貼您的兩個表的模式,但是,你可以根據下面自己做一些嘗試:

    DELIMITER $$ 
    CREATE PROCEDURE `proc`() 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
    BEGIN 
        UPDATE `connection` 
        SET `connection`.connection_status = 'offline' 
        WHERE NOT EXISTS(
         SELECT 1 
         FROM connection_temporary 
         WHERE connection_temporary.keyname = `connection`.keyname 
        ); 
    
        INSERT INTO `connection` (keyname, real_ip, virtual_ip, received_bytes, sent_bytes, connection_tstamp) 
        SELECT keyname, real_ip, virtual_ip, received_bytes, sent_bytes, connection_tstamp 
        FROM connection_temporary 
        WHERE NOT EXISTS(
         SELECT 1 
         FROM `connection` 
         WHERE connection_temporary.keyname = `connection`.keyname 
        ); 
    
        UPDATE `connection` 
        JOIN connection_temporary ON connection_temporary.keyname = `connection`.keyname 
        SET `connection`.keyname = connection_temporary.keyname 
        ,`connection`.real_ip = connection_temporary.real_ip 
        ,`connection`.virtual_ip = connection_temporary.virtual_ip 
        ,`connection`.received_bytes = connection_temporary.received_bytes 
        ,`connection`.sent_bytes = connection_temporary.sent_bytes 
        ,`connection`.connection_tstamp = connection_temporary.connection_tstamp; 
    END 
    $$ DELIMITER ;