1

重複の可能性:
存在する場合は更新し、存在しない場合は挿入(アップサートまたはマージ)するにはどうすればよいですか?

mysqlデータベースに挿入する方法、レコードがすでに存在する場合は、更新します...このページに解決策があることを知っています:http: //dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate .html

sib_table

+=======================================================+
| sib_id | std_id  |  sib_name  |  sib_sex  |  sib_age  |
+=======================================================+
| 1      | 77      |  Sajjad    |   m       | 5/17/1990 |
| 1      | 77      |  Farah     |   f       | 9/14/1980 |
| 1      | 77      |  Bilal     |   m       | 1/10/1995 |
+=======================================================+

このテーブルに別の兄弟を追加したい場合、SQLはどうなりますか。

INSERT INTO sib_table
  (std_id,sib_name,sib_sex,sib_age) 
VALUES ('77','Sajjad','m','1/5/2010')  
ON DUPLICATE KEY 
  UPDATE id = LAST_INSERT_ID(id), c = 3;

INSERT INTO sib_table
  (std_id,sib_name,sib_sex,sib_age) 
VALUES 
  ('77','Aamna','f','1/27/2005')  
ON DUPLICATE KEY 
  UPDATE id = LAST_INSERT_ID(id), c = 3;
4

3 に答える 3

3

あなたは近くにいますが、節をステートメントON DUPLICATE KEYのように扱う必要があります。UPDATEつまり、次のことを実行しようとすると、一意のキーを設定する必要があります。

INSERT INTO sib_table (std_id,sib_name,sib_sex,sib_age) 
VALUES ('77','Sajjad','m','1/5/2010')  

...一度だけ動作します。次に、句を追加してON DUPLICATE KEY UPDATE、残りのフィールド(つまり、キーの一部ではないフィールド)を一致するように変更します。

したがって、たとえば、テーブル構造を正しく読み取ったとすると、列std_idとに一意の複合キーを配置sib_nameすると、同じ名前の2つの兄弟を追加できないようになります。そしてそれはあなたがこのような別のものを追加するために行くときそれを意味します:

INSERT INTO sib_table (std_id,sib_name,sib_sex,sib_age) 
VALUES ('77','Aamna','f','1/27/2005')  
ON DUPLICATE KEY 
  UPDATE sib_sex = 'f', sib_age = '1/27/2005'

...次の2つのいずれかを実行します。

  1. Aamnaがファミリー#77に存在しない場合は、新しい行を追加します。
  2. または、以前に追加されたことがある場合は、Aamnaの性別と誕生日を更新します。

REPLACEこの構造は、挿入しようとしたもので単に上書きするのではなく、競合する行とは異なる何かを実行できるため、MySQLよりも強力です。もちろん、ほとんどの場合、の機能REPLACEは実際に必要なものです。しかし、より一般的なステートメントを知っている方がよいでしょう。

于 2011-05-09T00:49:41.970 に答える
1

次のことを試してください。

REPLACE INTO sib_table (std_id,sib_name,sib_sex,sib_age) 
VALUES ('77','Aamna','f','1/27/2005')
于 2011-05-09T00:27:48.657 に答える
0

ケースの行数を確認します。

SELECT * where ...

if (number of rows == 0) {
   INSERT ...
} else {
   Update ...
}
于 2011-05-08T22:35:32.983 に答える