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

コーディングルール 前半まとめ

リーダブルコードを3分の2ぐらいよんだので現時点でのまとめを。 Contents1 いいコードの定義2 具体的な手法2.1 変数の名称2.2 コード自体の見た目2.3 コメント2.4 制御フロー2.5 …

no image

JWT(ジョット)の認証に関して

セッションやtokenを使った、認証について色々書いてきましたが、今回はJWTを使った認証について。 Contents1 以前の認証がらみの記事2 JWT(ジョット)とは?2.1 ヘッダー2.2 クレ …

no image

アプリケーションアーキテクチャについて 〜既存のMVCに関して〜

今回はアプリケーションのルーター以降のアーキテクチャに関して。主にMVCなどについて説明したいと思います。 Contents1 MVC(Model,Controller,View)1.1 トランザクシ …

no image

オブジェクト指向設計 単一責任のクラスの設計

オブジェクト指向をするうえでの大事なポイントなど Contents1 単一責任のクラス設計1.1 メモ1.2 実際のコーディング上のコツ1.3 感想1.4 参考文献 単一責任のクラス設計 メモ 単一責 …

no image

オブジェクト指向について その1

ちょっと最近、仕事でソースの書き方がいい加減になってきたのでオブジェクト指向について考え方を再確認しようと思います。 参考文献 SoftWareDesign 2015年9月号 何も考えずにプログラムを …