ホームページ >データベース >mysql チュートリアル >MySQL は INSERT ... SELECT ... ON DUPLICATE KEY UPDATE 構文をどのように処理しますか?

MySQL は INSERT ... SELECT ... ON DUPLICATE KEY UPDATE 構文をどのように処理しますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-06 06:59:11687ブラウズ

How Does MySQL Handle INSERT ... SELECT ... ON DUPLICATE KEY UPDATE Syntax?

INSERT ... SELECT ... ON DUPLICATE KEY UPDATE 構文の明確化

一部の列が既に存在する可能性がある INSERT クエリを実行する場合ターゲットテーブルでは、ON DUPLICATE KEY UPDATE 句を使用できます。この句を使用すると、更新基準と更新する値を指定できます。

このようなクエリの UPDATE 句の構文は次のとおりです。

ON DUPLICATE KEY UPDATE column1=value1, column2=value2, ...;

理解すべき重要な点は次のとおりです。 MySQL が挿入および更新される値をどのように参照するか。デフォルトでは、等号の前の部分は INSERT INTO 句で指定された列を参照し、等号の後の部分は SELECT 句で指定された列を参照します。

たとえば、次のクエリを考えてみましょう。

INSERT INTO lee(exp_id, created_by, location, animal, starttime, endtime, entct, inact, inadur, inadist, smlct, smldur, smldist, larct, lardur, lardist, emptyct, emptydur)
SELECT id, uid, t.location, t.animal, t.starttime, t.endtime, t.entct, t.inact, t.inadur, t.inadist, t.smlct, t.smldur, t.smldist, t.larct, t.lardur, t.lardist, t.emptyct, t.emptydur 
FROM tmp t WHERE uid=x
ON DUPLICATE KEY UPDATE entct=t.entct, inact=t.inact, ...;

このクエリでは、INSERT INTO 句で指定された列が列の割り当てに使用されます。デフォルト:

  • exp_id
  • created_by
  • location
  • animal
  • starttime
  • endtime

で名前が付けられた列SELECT句を使用して更新を指定します値:

  • t.location
  • t.animal
  • t.starttime
  • t .endtime
  • t.entct
  • t.inact
  • t.inadur
  • t.inadist
  • t.smlct
  • t.smldur
  • t.smldist
  • t.larct
  • t.lar dur
  • t.lardist
  • t.emptyct
  • t.emptydur

列ON DUPLICATE KEY UPDATE 句に含まれていないものは更新されません。

以上がMySQL は INSERT ... SELECT ... ON DUPLICATE KEY UPDATE 構文をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。