2017-06-05 53 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 ;