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

オブジェクト指向 アプリケーション層に関して

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にアプリケーション層(以下AP層)。MVCモデルでいうところのコントローラーに近い?)の考え方について。 Contents1 …

no image

Excelでのテストデータ作り

ExcelVBAでテストデータを作るときに役に立った関数などを紹介させていただきます。 user_id time 2143 2017/1/16 3:35 6724 2017/1/2 6:05 4528 …

no image

リーダブルコードまとめ

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

no image

オブジェクト指向 アプリケーション間連携(主にWebAPI)

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日はプレゼンテーション層、いわゆるMVCのViewにあたる部分。 Contents1 アプリケーション間連携(主にWEBAPIに関 …

no image

オブジェクト指向 データベース層

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にデータベース層の考え方について。 Contents1 データべース層1.1 要点1.1.1 典型的なダメテーブル設計1.1 …