Quantcast
Channel: Planet MySQL
Viewing all articles
Browse latest Browse all 1081

オープンソースRDBMSにUPSERT(MERGE)が揃いました。

$
0
0
本エントリはFirebird Advent Calendar 2015の二日目です。

オープンソースRDBMS御三家(Firebird, MySQL, PostgreSQL)の中では、唯一FirebirdがSQL標準のMERGE文に対応していました。

MySQLではINSERT IGNOREにて、マッチしたときに、なにもしない(IGNORE = DO NOTHING)、
INSERT … ON DUPLICATE KEY UPDATEにて、マッチしたときに、更新(DO UPDATE)することにより、
MERGE文相当の処理ができていました。

PostgreSQLでは手軽に行えるUPSERTの機能はなかったのですが、今回MySQLのINSERT … ON DUPLICATE KEY UPDATEに
似た独自構文にて、9.5で対応することになりました。マッチしたときに差分表(m_shain)で更新するには、次のような例になります。

INSERT INTO shain(id, name) select id, name FROM m_shain ON CONFLICT ON CONSTRAINT 制約名 DO UPDATE set name = EXCLUDED.name;

MySQLと違う違うところは以下のとおり。

・ON DUPLICATE KEYではなく、ON CONFLICT ON CONSTRAINT
・MySQLと違って制約名が必要。
・表名(m_shain)修飾ではなく、EXCLUDEDというキーワードで修飾

まぁ詳しくはwikipediaのページにて。

んで、Firebird 2.xのMERGE文実装は、厳密にいうと上のページにもあるように複数のWHEN MATCHED | NOT MATCHED句に対応していなかったんですが、Firebird 3.0では、複数の記述にも対応し、さらにSQL:2008で拡張されたWHEN MATCHED THEN DELETEにも対応しました。パチパチ。

この部分では、一歩先ゆくFirebirdでした!

JUGEMテーマ:コンピュータ


PlanetMySQL Voting: Vote UP / Vote DOWN

Viewing all articles
Browse latest Browse all 1081

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>