2016-08-18 14 views
0

私は文を無視挿入blukのMySQLに関するいくつかの質問をしました無視:MySQLの一括挿入は、両方のInnoDBとMyISAM.An例えば、

INSERT IGNORE INTO table(`reference`) VALUES ('1','2','3') 

リファレンスも一意のキーです。

  1. バルクインサートアトミックですか?ですから、これをデータベースに送ると、この文の間に他に挿入がないことを保証できますか?

  2. バッチインサートは、バッチに挿入された最初のIDの値を返します。しかし、最初の挿入が重複して発生した場合に何が起こるか(私は(成功したインサートが返され、私はドキュメントでこれを見つけることができませんでした)戻り値として0を取得したり、横にあるん

種類よろしく、

答えて

2

多くの事が...ここ

  • 構文エラーが起こっている:あなたは1列が、3つの値を持っています。おそらくあなたはこれを代わりに意味していましたか? ... VALUES (1), (2), (3)
  • この修正を行った後、1つの文はトランザクション(InnoDBを使用している場合)に3行の1行INSERT IGNOREsがラップされていることに本質的になります。
  • IGNOREのため、重複するキーは挿入を中止しません。
  • バリアブルinnodb_autoinc_lock_modeは、複数行のINSERTの間にAUTO_INCREMENTがどうなるかを制御します。この質問に完全に答えるためにその価値を知る必要があります。既定では、AUTO_INCREMENT idは、重複する数値の数にかかわらず3でバンプされます。これはIDの驚異的な「燃焼」につながります。 (そして「最初のID」が何であるかについての質問は除きます。)
  • MyISAMのような非トランザクションエンジンでは「アトミック」はありません。特に、...
  • MyISAMでは、中断された(例えば、電源障害による)複数行の書き込み(挿入/更新/削除)がいくつかの行を実行している可能性があります。 (これがMyISAMを避ける重要な理由です)
0

単一のMySQLのクエリ、それはSELECTINSERTまたは何か他のものも、これはあなたのINSERTが実行されることを意味するものではありません。文が完全に成功し、仕上げ、または失敗し、ロールバックされますどちらかという限りアトミックでなければなりませんこれは完全にACIDに準拠していますが、アトミックである必要があります。

A batch insert returns the value of the First ID inserted of the batch.

私はあなたが使用しているツールやインタフェースを知りませんが、documentationはそう言う:

JDBCで

If you use an INSERT ... VALUES statement with multiple value lists or INSERT ... SELECT, the statement returns an information string in this format:

Records: 100 Duplicates: 0 Warnings: 0

、例えば、APIは、INSERT操作によって影響を受けたレコードの数を返しません挿入された最初の行のID。