2

自動インクリメントされた主キー、人の名前の列、およびいくつかのデータを含むMySQLテーブルがあります。

人の名前が一意である場合に新しい行を挿入できるMySQLクエリはありますが、名前が重複している場合は、その行を更新しますか?

つまり

ID, Name,        Data
1 , Michael,     x
2 , Stephen,     y
3 , Christopher, z

「qq」データを含むデータベースに「Michael」を追加する場合、データベースは次のようになります。

ID, Name,        Data
1 , Michael,     qq
2 , Stephen,     y
3 , Christopher, z

「John」に「zz」データを追加すると、データベースは次のようになります。

ID, Name,        Data
1 , Michael,     x
2 , Stephen,     y
3 , Christopher, z
4 , John,        zz

ON DUPLICATE KEY UPDATEコマンドを知っていますが、主キーが同じである場合ではなく、名前が同じである場合にのみ更新したいと思います。

4

2 に答える 2

7

UNIQUEにインデックスを作成しますNameON DUPLICATE KEY UPDATEその後、正しく動作します。

于 2013-01-26T18:44:22.507 に答える
0

ストアドプロシージャを作成し、クエリコードで呼び出すだけです。

手順:

   DROP PROCEDURE IF EXISTS InsUpdTable $$
        CREATE PROCEDURE InsUpdTable
        (
          IN _name VARCHAR(45),
          IN _data VARCHAR(45)
        )
        BEGIN
        if exists (select ID from mytable where name = _name)
        Then
          update mytable set data = _data where name=_name;
        else
          insert into mytable(name, data) values(_name, _data);
        END IF;
        END $$
        DELIMITER ;

クエリ:

call InsUpdTable('John','zzz')
于 2013-01-26T18:57:00.207 に答える