DMLコマンドの「落とし穴」更新MySQL
データベースを操作しなければならなかった各プログラマは、DMLオペレータに直面しました(トランス。英語で。 - "データ操作言語")、例えば 選択, 挿入, 削除 と 更新. MySQL環境では、上記のすべてのコマンドも使用しています。
これらの演算子は論理的に任命 - 、新しい値を挿入し、レコードの選択更新既存のデータ、完全に、または指定された条件に従って、データベース内の情報の削除。理論的な研修教材を詳細に各コマンドとその構文の動作原理を説明したが、どこにも使用中に実際に発生する可能性の困難への参照が見つかりません。この材料は、それらのいくつかの検討に専念されます。
DMLオペレータについて簡潔に説明する(Insert)
さらに進む前に、それぞれの機能の目的をより詳細に再呼び出しする必要があります。 2つの演算子にもっと興味があります: 挿入 と 更新これは、大量のデータを処理するときに主な問題が発生するからです.
コマンドで開始する 挿入, スムーズに アップデート。 MySQL このシステムは、他の現代のDBMSと同様に、 挿入 既存のエントリに新しいエントリを追加するデータベーステーブル。この操作の構文は非常に簡単で簡単です。値が入力されるフィールド、宛先(テーブルの名前)、およびエントリのリストを直接列挙します。各コマンド実行時 挿入 データベースは新しい値で更新されます。
更新演算子
しかし、実際には非常に頻繁にいくつかのデータセットに対して、1つ以上の属性値を更新する必要がある状況。一例として、企業が主要部門の名前をさらに変更して改革を実施した状況を挙げることができます。この場合、部門ごとに変更する必要があります。名前だけが変更された場合、問題は非常に迅速に解決されます。しかしながら、通常は、主キーとして機能全体の生産、の各成分の符号化を変更する場合は、今度は、情報および各従業員の変更を伴います。
問題の問題を解決するには、 DML演算子 - アップデート。 MySQLサーバー、多数のレコードを操作している、更新演算子の助けを借りて、それは必要な要求を満たし、問題を解決するでしょう。しかし、時にはアップグレード中に、困難を説明するのがかなり明確で難しいわけではありません。これは、更新記録の複雑さについて、以下で説明します。
理論では何が少し言われています...
上記の更新コマンドテーブル内の既存のエントリを更新するために使用されます。しかし実際には、データベースサーバにアクセスするクライアントは、テーブルに特定のデータセットがあるかどうかを常に知っているとは限りません。後続の更新のためにデータベース内のデータの可用性を予備的にチェックすることは、時間のかかる無駄なサーバ機能につながります。
これを防ぐために、DBMSに特別な設計が用意されています。 MySQL - 挿入*アップデートインサートまたはアップデートで互いに独立して動く。つまり、特定の条件のテーブルにエントリがある場合、更新が行われます。該当する条件のデータが見つからない場合、MySQLサーバはデータ追加要求を実行できます。
重複データでデータを更新する
これの重要な要素 挿入-データベース管理システムにおけるクエリ MySQL - "重複キー更新時" 接頭辞。クエリの完全な構文は次のとおりです。重複キーの更新時にtest_table(employer_id、name)の値(1、 "Abramov")に挿入するlast_modified = NOW();"
そのような要求は、従業員の行動を記録すること、例えば、企業の通過とその後の休憩時間の計算との遅延の検出と遅延の検出とを決定すること。テーブルに複数のエントリを作成しないようにするには、一定の更新で各従業員のレコードを保持するだけで十分です。これを可能にするのは重複チェックデザインです。
実際に問題について...
チェックポイントでの従業員の行動登録に関する上記の例を考えてみると、自己高揚の使用を挙げることができます(オート_増分)フィールド(主キーの値を入力するために一般的に使用されるフィールド一次_キー)。コマンドを使用する場合 MySQLのアップデート との建設中 挿入 オート_インクリメント、 フィールドは絶えず増加しています。
同様に、重複検出の場合には置換設計が用いられる。 「自動インクリメント」の値は、必要でない場合でも増加します。このため、値の欠落や範囲のオーバーフローが発生し、その後データベース管理システムのパフォーマンスに違反することになります。
問題の可能性が最も高い
説明されている問題を考慮する必要があります ウェブ - マルチユーザーシステム(インターネットサイト、ポータルなど)で最も一般的であるため、システム内で多数の手順が実行されている場合 挿入 と MySQLをアップデートしてください。
PHP-データベースへの呼び出しは非常に頻繁に実行されます。したがって、次のように定義されたフィールドの最大値 auto_incrementそれはすぐに起こり、発生した困難を分析するとき、すぐに原因を確立することは不可能です。
したがって、開発者は注意深く設計を使用することをお勧めします 重複キーで チームで mysqlの更新。選択 - データベースサーバーにアクセスするときのリクエスト彼らは間違いなく動作しますが、データベースに新しいレコードを追加することは不快な状況を伴い、重大な問題につながります。代わりに、自動増分フィールドが最初にレコードをチェックして更新することをお勧めします。