いつだっておもしろい事を考えているムカイです。
とても簡単に扱えて便利な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にも予約語があります
クエリを発行する時に使用するinsertやunionなどはもちろん予約語になっています
というわけで(個人的に)ハマりやすい予約語
unique
check
group
lock
option
update
などが挙げられます。
カラム名に_xxx(アンダースコア + なにがし)を足すなどしておけば
回避できる場合が多いです。
なにがしはatだったりflagだったりします
少し例外ですが、symfonyではpropelを使ってる場合に限り
カラム名にcountを使用するとpropelの予約語として認識されます。
たくさんあります。びっくりですね
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
予約語っぽいのをつけない!
名前をつける時はひと工夫が大事ですね
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。