replace ステートメントは、一般的に insert ステートメントに似ています。ただし、テーブルに主キーまたは一意のインデックスがある場合、挿入されたデータが元の主キーと同じか一意であれば、元のデータは削除され、新しいデータが追加されます。そのため、replace ステートメントを実行することは、delete ステートメントと insert ステートメントを実行することと同じになることがあります。早速例を見てみましょう。 id、title、uid の 3 つのフィールドを持つテスト テーブルを作成します。id は自動インクリメントの主キーで、uid は一意のインデックスです。 テーブル「test」を作成します( `Id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(25) デフォルト NULL コメント 'タイトル', `uid` int(11) デフォルト NULL コメント 'uid', 主キー (`Id`)、 ユニークキー `uid` (`uid`) )ENGINE=InnoDB デフォルト文字セット=utf8mb4;
結果は次のとおりです。 replace into を使用してデータを挿入する場合: test(title,uid) VALUES ('今回は8日間休みです','3') に置き換えます。 uidが存在する場合は、replace intoステートメントを使用します REPLACE INTO test(title,uid) VALUES ('これはUid=1の最初のデータです','1'); MySQL がデータの競合 (つまり、uid の重複) に遭遇したときに、実際に古いレコードを削除して新しいレコードを書き込むとは予想していませんでした。上記の例から、ブロガーは次のことがわかると思います。 replace into は insert と似ていますが、replace into は最初にテーブルにデータを挿入しようとする点が異なります。 1. このデータ行がテーブル内に既に存在することが判明した場合 (主キーまたは一意のインデックスによって決定)、まずこのデータ行を削除してから、新しいデータを挿入します。 2. それ以外の場合は、新しいデータを直接挿入します。 データが挿入されるテーブルには、主キーまたは一意のインデックスが必要であることに注意してください。そうでない場合、replace into はデータを直接挿入し、テーブルに重複したデータが生成されます。 MySQL の replace into には 3 つの形式があります。 1. tbl_name(col_name, ...) の値に置き換えます(...) 2. tbl_name(col_name, ...) に置き換えて、... を選択します。 3. tbl_name に col_name=value を設定し、... を置き換えます。 最初の形式は insert into の使用法に似ています。 replace select の 2 つ目の使用法も insert select に似ています。この使用法では、列名が一致している必要はありません。実際、MYSQL は select によって返される列名を気にしません。必要なのは列の位置です。たとえば、replace into tb1( name, title, mood) select rname, rtitle, rmood from tb2; この例では、replace into を使用して、tb2 のすべてのデータを tb1 にインポートします。 3 番目の置換セットの使用方法は、更新セットの使用方法と似ています。「SET col_name = col_name + 1」などの割り当てを使用すると、右側の列名への参照は DEFAULT(col_name) として扱われます。したがって、この割り当ては SET col_name = DEFAULT(col_name) + 1 と同等です。 最初の 2 つの形式の方が頻繁に使用されます。キーワード「into」は省略できますが、意味がより直感的になるように「into」を追加した方がよいでしょう。さらに、値が指定されていない列については、MySQL によって自動的にデフォルト値が割り当てられます。 以下もご興味があるかもしれません:
|
<<: 1 つの記事で JSON (JavaScript Object Notation) を理解する
>>: Dockerコンテナイメージからコードを復元する手順
注: このデモはミニプログラム環境でテストされており、他の h5 および pc Web ページにも適...
1. 本番環境でMySQLのデッドロックを監視し、デッドロックの可能性を減らす方法まず、デッドロック...
私たちのベテランの先人たちは、数え切れないほどのコードを書き、数え切れないほどの落とし穴に陥ってきま...
MySql バッチ挿入の最適化 SQL 実行効率の例の詳細な説明itemcontractprice ...
目次1. コンパイラコードフォーマット仕様設定2. Vueテンプレートの設定1. コンパイラコードフ...
この記事では、参考までに、簡単な英中辞典を実装するためのjsの具体的なコードを紹介します。具体的な内...
watch : データの変更を監視する(特定の値の変更イベント) vue2.x データ(){ 戻る ...
前面に書かれたMySQL をアップグレードする方法には、インプレース アップグレードと論理アップグレ...
この記事では、例を使用して MySQL ビューの機能と使用方法を説明します。ご参考までに、詳細は以下...
目次1. 背景2. ローカルカスタム指示3. グローバルカスタム指示4.1 カスタムコマンドフック関...
Macはシェル(ターミナル)SSHを使用してリモートサーバーに接続します前提条件: 接続する必要があ...
4つの実用的なVueカスタム指示1. Vドラッグ要件: マウスドラッグ要素アイデア:要素のオフセット...
Nginx は、わずか数年で Web サーバー市場の大部分を占めるようになりました。周知のとおり、N...
この記事では、シンプルなカレンダー効果を実現するためのJavaScriptの具体的なコードを参考まで...
以下のように表示されます。 test コマンドはファイルが存在するかどうかを判断します。 ssh u...