データベースを操作しなければならなかったすべてのプログラマは、DML演算子(あたり。英語から。 - 「データ操作言語」など) 選択する, インサート, 削除する と 更新. MySQL環境では、上記のすべてのコマンドを武器として使用します。
これらのオペレーターは論理的に彼らについて話します割り当て-レコードの選択、新しい値の挿入、既存のデータの更新、完全な、または指定された条件による、データベース内の情報の削除。トレーニング理論資料では、各コマンドの動作原理とその構文について詳しく説明していますが、実際に使用中に発生する可能性のある問題についてはどこにも触れていません。この資料は、それらのいくつかを検討することに専念します。
DMLオペレーターの概要(挿入)
先に進む前に、各機能の目的をもう一度詳しく思い出す必要があります。 2つの演算子について詳しく説明します。 インサート と 更新、大量のデータを処理するときに主な困難が発生するのはそれらからです.
あなたはコマンドで始める必要があります インサート, そしてスムーズに行く 更新。 MySQL 他の最新のDBMSと同様に、システムはオペレーションを使用します インサート 既存のエントリに新しいエントリを追加するにはデータベーステーブル。この操作の構文は非常に単純で簡単です。値が入力されるフィールドの列挙、宛先-テーブルの名前-および入力されたデータ自体のリストが含まれます。コマンドを実行するたび インサート データベースは新しい値で更新されます。
更新ステートメント
ただし、実際には、一連のデータについて、1つ以上の属性値を更新する必要がある状況。例として、企業が主要部門の名前をさらに変更して改革を行ったときの状況を挙げます。この場合、部門ごとに変更する必要があります。名前のみが変更された場合、問題は非常に迅速に解決されます。しかし、プロダクション全体の各コンポーネントのエンコードが変更され、これが原則として主キーとして機能する場合、これは次に、情報の変更と各従業員の変更を伴います。
検討中の問題を解決するには、 DML演算子 - 更新。 MySQL-多数のレコードを操作するサーバーupdateステートメントを使用して、要求されたリクエストを実行し、問題を解決します。しかし、更新中に、完全に明確ではなく説明が難しい問題が発生する場合があります。これは、後で説明するレコードの更新の難しさについてです。
理論的にはほとんど何も言われていない...
上記の更新コマンドは、テーブル内の既存のレコードを更新するために使用されます。しかし、実際には、データベースサーバーにアクセスするクライアントは、特定のデータセットがテーブルに存在するかどうかを常に認識しているわけではありません。後続の更新のためのデータベース内のデータの可用性の予備チェックは、時間コストと無駄なサーバー機能につながります。
これを防ぐために、DBMSには特別な設計が用意されています MySQL-挿入*更新挿入または更新ができる互いに独立して実行します。つまり、特定の条件のレコードがテーブルにある場合、更新が発生します。問題の条件のデータが見つからない場合、MySQLサーバーはデータの追加要求を実行できます。
重複がある場合のデータの更新
これの重要な要素 インサート-データベース管理システムでのクエリ MySQL-「重複キーの更新について」 コンソール。リクエストの完全な構文は次のとおりです。重複キー更新時にtest_table(employer_id、name)値(1、 "Abramov")に挿入last_modified = NOW();"
このようなリクエストは、従業員の行動の登録。たとえば、企業のチェックポイントを通過する時間を決定し、休憩の時間をカウントして遅延を特定します。テーブルに複数のエントリを作成しないようにするには、各従業員のレコードを常に更新して保持するだけで十分です。これを可能にするのは、重複チェック設計です。
実際に問題について...
チェックポイントで従業員の行動を登録する上記の例を考慮すると、自己増加の使用(自動_インクリメント)主キー値を入力するために一般的に使用されるフィールド(プライマリ_キー)。コマンドを使用する場合 MySQLアップデート で建設中 インサート 自動_インクリメント、 フィールドは絶えず増加しています。
同様に、すべてが重複が見つかった場合は、置換コンストラクトが使用されます。 「自動インクリメント」の値は、不要な場合でも増加します。このため、値の欠落や範囲のオーバーフローに関する問題があり、その後、データベース管理システムの誤動作につながります。
問題を引き起こす可能性が最も高い
説明されている問題を考慮する必要があります ウェブ-開発者、マルチユーザーシステム(インターネットサイト、ポータルなど)で最も一般的であるため、システムで多数の手順が実行される場合 インサート と MySQLを更新します。
PHP-データベースは非常に頻繁にアクセスされます。したがって、次のように定義されたフィールドによる最大値の達成 自動増加、は迅速に発生し、発生した問題を分析する場合、理由をすぐに特定することはできません。
したがって、開発者は構造の使用に注意深くアプローチすることをお勧めします 重複キー チーム内で mysqlの更新。選択する - データベースサーバーにアクセスするときのクエリエラーなしで動作しますが、データベースに新しいレコードを追加すると、不快な状況が発生し、その後深刻な問題が発生します。または、自動インクリメントフィールドで、最初にフィールドのレコードの存在を確認してから更新することをお勧めします。