sql >> データベース >  >> RDS >> Mysql

2つの条件でINSERTINTOまたはUPDATE

    それがinsert on duplicate key updateするものです です。

    そのマニュアルページはこちら です。 。

    秘訣は、clashを実行するために、テーブルに一意のキー(複合の場合もある)が必要なことです。 挿入を行うことの検出することができます。そのため、更新はその行で発生し、それ以外の場合は挿入されます。もちろん、主キーにすることもできます。

    あなたの場合、

    のような複合キーを持つことができます
    unique key(theName,theDate)
    

    行がすでに存在する場合は、clash が検出され、更新が行われます。

    これが完全な例です

    create table myThing
    (   id int auto_increment primary key,
        name int not null,
        values1 int not null,
        values2 int not null,
        dates date not null,
        unique key(name,dates) -- <---- this line here is darn important
    );
    
    insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
    insert myThing(name,values1,values2,dates) values (778,1,1,'2015-07-11') on duplicate key update values2=values2+1;
    -- do the 1st one a few more times:
    insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
    insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
    insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
    

    結果を表示

    select * from myThing;
    +----+------+---------+---------+------------+
    | id | name | values1 | values2 | dates      |
    +----+------+---------+---------+------------+
    |  1 |  777 |       1 |       4 | 2015-07-11 |
    |  2 |  778 |       1 |       1 | 2015-07-11 |
    +----+------+---------+---------+------------+
    

    予想どおり、重複キー更新の挿入は2行だけで機能します。



    1. OracleのCREATEORREPLACEVIEWに相当するSQLServer

    2. MySQL外部キー

    3. 今年の最初と最後の日付を取得するにはどうすればよいですか?

    4. listviewは、Androidのデータベースからのデータを表示します