公開日:2012.08.24

SQL ServerとMySQL

テクログ

技術ブログが始まって2ヶ月弱・・・・

みんなしっかりとした知識を披露してくれて・・・タジタジのなべっちです。

最近は開発をガッツリやっているわけではないので、書かずに華麗にスルーしようと思っていたのですが・・・
しかたない。
次に繋がるように、簡単にわかる事を書いてハードルをさげてやろうと思っています。

遠い過去の話ですが・・・VB6とSQL Serverを使ってとある保険のシステムを開発していました。

ずっとSQL Serverを使っていたので、私の基本的なSQL文法=SQL Serverの文法という図式が成立してしまっています。

最近のコアテックでは、MySQLを使うことが非常に多いのですが、SQL Serverとの違いなんてまったく意識せずSQL文を書く事が・・・

すると・・・・何度確認してもあっているはずの文法が動かなくてはまるという事がありまして・・・非常に苦労しました。。。。

調べていたらこんな違いが!と言う事が書いてあるHPを見つけてやっと解決。。。。

非常に助かったので、そのHPから抜粋して違いを書いておきます。

はまったのはこの部分↓
・DELETE文等で自分自身をサブクエリで参照できない!

DELETE FROM table1 WHERE id IN (SELECT id FROM table1 where key = 1 )

keyの値 が 1 のレコードを削除するという文です。
※本来はサブクエリを使う必要がない文ですけど、わかりやすく簡単に書いてあります。

その他にこんなのもありました。

・SELECT INSERT

INSERT INTO table1 (a1,a2) SELECT "値1","値2" FROM table1 
WHERE NOT EXISTS (SELECT * FROM table1 WHERE a1 = "値1" AND a2 ="値2")

既に値1、値2のレコードが存在している場合は登録しないという文です。

My SQLではNOT EXISTSでもEXISTSでも行が取れない為 レコードは登録されないようです。
解決方法は↓

INSERT INTO table1 (a1,a2) SELECT "値1","値2" FROM (SELECT "値1" AS b1,"値2" AS b2) tbl1
WHERE NOT EXISTS (SELECT * FROM table1 WHERE a1 = "値1" AND a2 ="値2")

とサブクエリを挟むと行が作成されてレコードが登録されるようです。

もう1つ
AUTO_INCREMENTは物理削除すると削除した番号を再利用する

SQL ServerのIDENTITYとは違うので同じ感覚で使用するとはまる原因になりそうです。
主キーとして使用する際にはご注意を・・・・

気付かなかった~
知らなかった~

とはまる事があるようなのでメモ書き程度に書いておきます。

次回からは役立つ技術情報が続く・・・・はず。

この記事を書いた人

渡辺雅宏

入社年2009年

出身地東京

業務内容社長補佐

特技または趣味大きいトイプードルと散歩

渡辺雅宏の記事一覧へ

テクログに関する記事一覧