skillup

技術ブログ

プログラミング全般

気をつけたいトリガー系の処理など

投稿日:

実務でひやっとすることがあり、自分への戒めも込めてメモします。

MySQLのcurrent_timestamp on update current_timestamp

MySQLでtimestamp型を設定していた場合、更新時間に current_timestamp on update current_timestamp をつけていますと、値が変わった場合に更新時間を自動的に書き換えてくれるので非常に楽ではあります。

が、気をつけないと、意図しない処理で値が変わった時にも更新時間を書き換えてしまうことがあります。例としてイレギュラーなUPDATE文を流した時などです。

意図しないで値をすでにかきかえてしまうというのがかなり怖いので、要注意です。更新時間を書き換えずに値を更新するということができなくなるので注意しましょう。

ちなみに5.6.5以前は1テーブルで1カラムのみでしたが、5.6.5以降は複数のカラムで属性の付与が可能です。

同じような意図でフレームワークのupdate処理なんかも自動で更新時間を書き換えることがあるので注意しておきましょう。

Laravelのfillなど

laravelにfillというメソッドがあり、カラム名と値のハッシュを渡してあげると自動で更新をしてくれます。

これまた意図しない値があった時に値を自動で書き換えてしまう可能性があります。

ハッシュの項目が多いと値を一つ一つプロパティにセットしていくというのは確かに大変ですので、このタイプの処理を私はこの手の処理をよく使いますが、似たような変数名がハッシュの中に入っていて気づかないうちに値が変わってしまうというのはかなり怖いので、メソッドの直前で値をしっかり精査しておく必要があります。

2つほどかきましたが、やはりupdateが絡む処理というのは影響範囲が大きく、被害も大きいだけに要注意です。一見便利な機能というのはこのようなリスクもあります。今回に限らず背後にこのようなリスクがあるということはしっかり覚えておいたほうがいいでしょう。

 

-プログラミング全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

エラーレポーティングサービス Sentryについて

リリースした後、運用段階に入ると定期的にバグ報告が上がってきます。 本来はリリース前に検収テストをすべきなんですが、そんな余裕ないことも多い(汗) で、そんな時に大事なのが エラーを気づけること 対処 …

no image

ミスを少なくする工夫について

プログラマであればだれもが「いかにバグを少なくするか」に腐心すると思います。 ところが、人間がある以上、バグ(ミス)は絶対にゼロにはなりません。バグ云々以前に、「人間はもともとミスをする生き物だ」とい …

no image

テストのダミーデータ作成

データベースに大量のデータを作りたいときにいつもあああやhoge,aaaですとデータという感じがしないですし、抽出や集計ができません。 なるべく自然に近いデータが欲しいのですが、簡単に作れる方法があり …

no image

Simple Factoryパターンについて

今回はデザインパターンの一種であるSimple Factoryパターンに関して。 Contents1 Simple Factoryパターンとは2 サンプルコード3 解説 Simple Factoryパ …

no image

emptyの扱いに関して

PHPで空白や存在確認として便利なemptyですが、乱用すると意図しない動きをすることがあるケースが多々あります。 Contents1 emptyの挙動に関して2 数値の03 検索などの全判定と値のな …

アーカイブ