1. 百度百科事典1. MySQLMySQL は最も人気のあるオープンソース データベースであると主張しています。 LAMP の M は MySQL を表します。 LAMP 上に構築されたアプリケーション (WordPress、Drupal、その他のほとんどの PHP オープンソース プログラムなど) では、MySQL が使用されます。 MySQL はもともと MySQL AB によって開発され、その後 2008 年に 10 億ドルで Sun に売却され、2010 年に Oracle に買収されました。 Oracle は、Standard、Enterprise、Classic、Cluster、Embedded、Community など、MySQL の複数のバージョンをサポートしています。無料でダウンロードできるものもあれば、有料のものもあります。 そのコアコードは GPL ライセンスに基づいています。MySQL は Oracle によって管理されているため、コミュニティは MySQL のオープンソースに影響を与えることを懸念しており、MariaDB や Percona などのいくつかのブランチが開発されています。 2. PostgreSQLPostgreSQL は、世界で最も先進的なオープンソース データベースであると自称しています。 PostgreSQL のファンの中には、高価格や高圧的なカスタマー サービスがないにもかかわらず、Oracle に匹敵する製品だと言う人もいます。 もともとは、Ingres データベースの後継として 1985 年にカリフォルニア大学バークレー校で開発されました。 PostgreSQL は完全にコミュニティ主導のオープンソース プロジェクトです。 複数の異なるコミュニティ、ビジネス、エンタープライズ エディションを提供する MySQL とは異なり、完全に機能する単一のバージョンを提供します。 PostgreSQL は、著作権表示を記載する限り、組織がコードを使用、コピー、変更、再配布できる自由な BSD/MIT ライセンスに基づいています。 3. MySQL に対する PostgreSQL の利点(1)リレーショナルデータベースだけでなく、以下のものを保存できる: 配列は、1 ビット配列でもマルチビット配列でも、テキスト ストレージを使用するよりもはるかに効率的な json (hStore) と jsonb をサポートします。 (2)地理情報処理拡張のサポート (3)REST APIを素早く構築できる (4)Rツリーなどのスケーラブルなインデックスタイプのサポートにより、特殊なデータの処理が容易になります。 MySQL ではツリーのような設計を扱うのは非常に複雑で、多くのコードを記述する必要がありますが、PostgreSQL ではツリー構造を効率的に処理できます。 (5)外部データソースのサポート強化 (6)文字列の長さに制限はない 等... 2. postgres での InsertOrUpdate コード例1. ユーザーテーブルを作成するテーブルpublic.t_userを作成します( ユーザー名varchar(100) NOT NULL、 年齢 int4 NOT NULL デフォルト 0, "パスワード" varchar(100) NULL, 削除された int4 NULL、 created_time タイムスタンプ NULL ); btree (ユーザー名、パスワード、年齢) を使用して、public.t_user に t_user_union_name_age_password という一意のインデックスを作成します。 2. 達成する簡単な方法入れる の中へ public.t_user (ユーザー名、パスワード、年齢、作成時刻) 値('zs'、'123'、18、now())、('ls'、'123456'、19、now())、('ww'、'123'、20、now()) 競合 (ユーザー名、年齢、パスワード) が発生した場合は、ユーザー名 = removed.username、年齢 = removed.age、パスワード = removed.password、作成時間 = removed.created_time を設定して更新します。 3. unnest関数を使用して実装する入れる の中へ public.t_user (ユーザー名、パスワード、年齢、作成時刻) 値(unnest(array['zs'、'ls'、'ww'])、unnest(array['123'、'123'、'123456'])、unnest(array[18、19、20])、unnest(array[now()、now()、now(])) 競合 (ユーザー名、年齢、パスワード) が発生した場合は、ユーザー名 = removed.username、年齢 = removed.age、パスワード = removed.password、作成時間 = removed.created_time を設定して更新します。 4. データがすでに存在する場合は何もしない3. 関連する主要機能の紹介1. ネスト解除(任意の配列) unnest 関数は、入力配列を、各列が対応する配列内の要素を表すテーブルに変換します。 主に行から列への変換のシナリオを完了するために使用されます。 INSERT ON CONFLICT は、PostgreSQL の挿入更新機能を実装します。 EXCLUDED仮想テーブルには更新したいレコードが含まれています 4. userMapper.xmlの作成<?xml バージョン="1.0" エンコーディング="UTF-8" ?> <!DOCTYPE マッパー PUBLIC "-//mybatis.org//DTD マッパー 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <マッパー名前空間="com.guor.dao.UserMapper"> <!-- バッチ挿入 --> <挿入 id="batchInsert" パラメータタイプ="java.util.HashMap"> <include refid="batchInsertSql"></include> </挿入> <sql id="バッチ挿入SQL"> ${map.tableInfo.schemaName}.${map.tableInfo.tableName} に挿入します ( "テーブルID", "ファイル名"、 「作成時間」、 <foreach collection="map.list.get(0)" index="キー" item="値" セパレーター=","> 「${キー}」 </foreach> ) 価値観 <foreach コレクション="map.list" アイテム="リスト" セパレーター=","> ( ${map.tableInfo.tableId}, #{map.tableInfo.fileName}, 今()、 <foreach コレクション="リスト" インデックス="キー" 項目="値" セパレーター=","> <選択> <test="map.varcharList.contains(key)">の場合 #{価値} </いつ> <test="map.dateList.contains(key)">の場合 TO_TIMESTAMP(#{値},'yyyy-MM-dd hh24:mi:ss') </いつ> <それ以外の場合> ${値} </そうでない場合> </選択> </foreach> ) </foreach> </sql> <!-- バッチ挿入更新 --> <挿入 id="batchInsertOrUpdate" パラメータタイプ="java.util.HashMap"> <include refid="batchInsertSql"></include> 紛争について( ファイル名、テーブルID <if test="map.tableInfo.flag"> , "id_number" </if> )更新する セット "table_id" = 除外。"table_id", "file_name" = 除外。"file_name", "create_time" = 除外。"create_time", <foreach collection="map.list.get(0)" index="キー" セパレーター=","> "${key}" = 除外。"${key}" </foreach> </挿入> </マッパー> V. MySQL での InsertOrUpdate コード例1. テーブルステートメントを作成するテーブル `t_user` を作成します ( `username` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NOT NULL, `password` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NOT NULL, `age` int(0) NULL デフォルト NULL, `address` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NULL デフォルト NULL, `create_time` datetime(0) NULL デフォルト NULL, `update_time` datetime(0) NULL デフォルト NULL, `version` int(0) NOT NULL, BTREE を使用した一意のインデックス `user_union_index`(`username`, `password`, `age`) ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; 2. 通常の方法t_userに挿入 (ユーザー名、パスワード、年齢、作成時間) VALUES('张三' ,'123456',18,NOW()) 重複キーの更新について username='张三', パスワード='123456', create_time=今() 3. 重複キーの更新について重複キー更新時の insert into は、データの挿入と更新を意味します。レコードに PrimaryKey または一意のインデックスがある場合、データベースにすでにデータがあれば、新しいデータで更新されます。データがない場合、効果は insert into と同じです。 t_userに挿入 (ユーザー名、パスワード、年齢、作成時刻、更新時刻、バージョン) 値( 'zs' ,'123',10,now(),now(),1) ,( 'ls' ,'123456',20,now(),now(),1) ,( 'ww' ,'123',30,今(),今(),1) 重複キーの更新について ユーザー名= VALUES(ユーザー名) ,password=VALUES(パスワード) ,年齢=VALUES(年齢) ,update_time=VALUES(更新時間) バージョン = バージョン + 1 4. 置き換えるreplace into は、データを挿入して置き換えることを意味します。レコードに PrimaryKey または一意のインデックスがある場合、データベースにすでにデータがある場合は、新しいデータに置き換えられます (最初に削除してから挿入します)。データがない場合、効果は insert into と同じです。 t_userに置き換える (ユーザー名、パスワード、年齢、作成時刻、更新時刻、バージョン) 価値観 ( 'zs' ,'123',10,今(),今(),1) 5. 無視を挿入するinsert ignore into は、競合を可能な限り無視して、激しく挿入することを意味します。 t_userに無視を挿入 (ユーザー名、パスワード、年齢、作成時刻、更新時刻、バージョン) 価値観 ( 'zs' ,'123',10,now(),now(),1) , ('ネザ','123',30,現在(),現在(),2) 6. まとめバッチで insert into values または insert into select を実行する場合、トランザクションの原子性と一貫性は満たされますが、 insert into select のロックの問題には注意が必要です。 存在する場合、前者は最初に削除してから挿入し、後者は更新します。 これで、MySQL + PostgreSQL バッチ挿入または更新の実装方法に関するこの記事は終了です。MySQL + PostgreSQL バッチ挿入または更新の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: LinuxカーネルマクロContainer_Ofの詳細な説明
以下のように表示されます。 SELECT prod_name,prod_price FROM pro...
無線インタラクションにずっと興味があったので、今回は実践してみようと思います〜この分析と評価は iO...
1. レビューMySQL の起動後にバッファ プールが初期化されます。バッファ プールは N 個の空...
Linux には、マウントされたハードディスクとマウントされていないハードディスクの 2 種類のハー...
IE6 で試してみたところ、ツールバーが表示されました。オプションに「イメージ ツールバーを有効にす...
まず、MySQLをskip-grant-tablesモードで起動します: mysqld --skip...
今日この問題に遭遇しました。サーバー側でiframeのsrc値を再割り当てし、iframeにIDを追...
それは何ですか? em はフォントの高さを指し、どのブラウザでもデフォルトのフォントの高さは 16 ...
目次効果ドキュメント最初のステップステップ2ステップ3ソースコード効果ドキュメント最初のステップta...
ここで nginx のリバース プロキシを試してみましょう。リバースプロキシ方式とは、インターネット...
Java 言語には多くのバージョンがあります。一般的に使用されている Java 8 に加えて、一部の...
構造擬似クラスセレクタの紹介構造擬似クラスセレクターは、いくつかの特殊効果を処理するために使用されま...
導入MySQL はレプリケーションを通じてストレージ システムの高可用性を実現します。現在、MySQ...
CSSの背景プロパティの値背景色背景画像背景繰り返し背景位置背景添付複合プロパティ: 背景: ba...
最近Tencent Cloudサーバーを購入し、環境を構築しました。このメモは、これまで MySQL...