Movatterモバイル変換


[0]ホーム

URL:


KAYAC Engineers' Blog

mysqlの予約語でハマった

いつだっておもしろい事を考えているムカイです。

とても簡単に扱えて便利なmysql。

しかしそんな楽しいmysqlにも予約語という罠(?)が潜んでいます

先日、mysqlで軽くDBを作ってデータを入れようとした時、まったくinsertができない事態に陥りました。

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'unique, sentence, url, deleted_at, created_at) VALUES ('9f075c89e1ce5c08cea7',' at line 1

なんでなんでと調べた結果、答えは「予約語」でした

そんなわけで今回はハマりにハマったmysqlの使ってはいけない予約語のお話です

予約語って?

その名の通り、プログラミング言語の仕様で予約された(定められた)単語で

プログラマが自由に使えないものです

「if」「for」「while」などが多くの言語で予約語になっています

mysqlでの予約語

当然mysqlにも予約語があります

クエリを発行する時に使用するinsertやunionなどはもちろん予約語になっています

ハマりやすい予約語

というわけで(個人的に)ハマりやすい予約語

unique

check

group

lock

option

update

などが挙げられます。

カラム名に_xxx(アンダースコア + なにがし)を足すなどしておけば

回避できる場合が多いです。

なにがしはatだったりflagだったりします

少し例外ですが、symfonyではpropelを使ってる場合に限り

カラム名にcountを使用するとpropelの予約語として認識されます。

MySQL ver4.1 予約語一覧

たくさんあります。びっくりですね

ADDALLALTERANALYZEANDASASCBEFOREBETWEENBIGINTBINARYBLOBBOTHBYCASCADECASECHANGECHARCHARACTERCHECKCOLLATECOLUMNCOLUMNSCONSTRAINTCONVERTCREATECROSSCURRENT_DATECURRENT_TIMECURRENT_TIMESTAMPCURRENT_USERDATABASEDATABASESDAY_HOURDAY_MICROSECONDDAY_MINUTEDAY_SECONDDECDECIMALDEFAULTDELAYEDDELETEDESCDESCRIBEDISTINCTDISTINCTROWDIVDOUBLEDROPDUALELSEENCLOSEDESCAPEDEXISTSEXPLAINFALSEFIELDSFLOATFLOAT4FLOAT8FORFORCEFOREIGNFROMFULLTEXTGRANTGROUPHAVINGHIGH_PRIORITYHOUR_MICROSECONDHOUR_MINUTEHOUR_SECONDIFIGNOREININDEXINFILEINNERINSERTINTINT1INT2INT3INT4INT8INTEGERINTERVALINTOISJOINKEYKEYSKILLLEADINGLEFTLIKELIMITLINESLOADLOCALTIMELOCALTIMESTAMPLOCKLONGLONGBLOBLONGTEXTLOW_PRIORITYMATCHMEDIUMBLOBMEDIUMINTMEDIUMTEXTMIDDLEINTMINUTE_MICROSECONDMINUTE_SECONDMODNATURALNOTNO_WRITE_TO_BINLOGNULLNUMERICONOPTIMIZEOPTIONOPTIONALLYORORDEROUTEROUTFILEPRECISIONPRIMARYPRIVILEGESPROCEDUREPURGERAID0READREALREFERENCESREGEXPRENAMEREPLACEREQUIRERESTRICTREVOKERIGHTRLIKESECOND_MICROSECONDSELECTSEPARATORSETSHOWSMALLINTSONAMESPATIALSQL_BIG_RESULTSQL_CALC_FOUND_ROWSSQL_SMALL_RESULTSSLSTARTINGSTRAIGHT_JOINTABLETABLESTERMINATEDTHENTINYBLOBTINYINTTINYTEXTTOTRAILINGTRUEUNIONUNIQUEUNLOCKUNSIGNEDUPDATEUSAGEUSEUSINGUTC_DATEUTC_TIMEUTC_TIMESTAMPVALUESVARBINARYVARCHARVARCHARACTERVARYINGWHENWHEREWITHWRITEX509XORYEAR_MONTHZEROFILL

まとめ

予約語っぽいのをつけない!

名前をつける時はひと工夫が大事ですね

カヤックでは、mysqlが楽しくて仕方がないエンジニアを募集しています

人気記事10選
検索
Powered by はてなブログ

引用をストックしました

引用するにはまずログインしてください

引用をストックできませんでした。再度お試しください

限定公開記事のため引用できません。

読者です読者をやめる読者になる読者になる

[8]ページ先頭

©2009-2025 Movatter.jp