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

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

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

no image

リーダブルコードまとめ

リーダブルコードほぼ読み切ったのでまとめを。チェックリスト化して、常にこれを見ながらコードは書いたほうがよさげ 前半のまとめや参考リンクでみたものとマージします。 Contents1 変数の名称2 コ …

no image

浮動小数点に関して

金額計算なんかでfloatを使うと誤差が出るっていうのは基礎的な話ではありますが、背景知識を含めて理解しておこうと思ったのでメモります。 Contents1 float,doubleでの誤差2 金額の …

no image

コードの抽象化

リーダブルコードも終盤に少しずつ近づいてきました。 今まではどちらかというとコードの点や線の技術に注目してきましたが、これからは面的な要素に注目していきます。 リーダブルコードでは「無関係の下位問題を …

no image

Eclipseでのソースフォーマットでの自動改行を防ぐ

小ネタ。Eclipseのソースフォーマッタはディフォルトでは一定の字数で改行されしまい、大変見にくくなったりします。 またHTMLなどでは改行してほしいタグが改行されないなど思ったとおりに動いてくれま …

アーカイブ