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

シェルの基礎+ユーザー切り替え関連

雑誌を見ていたらシェルの特集があったので、ちょっとメモリます。 補強したいところのみ要点をチェック。 Contents0.1 実行パスについて0.2 ビルドインコマンド0.3 シェル変数・環境変数0. …

no image

ポート解放(CentOS7)

新サーバー構築をしていたときにwebサーバーとしてnginxを立てましたが、外部から接続ができません。 500エラーすら吐かれず、ログも残っていません。 こんな時はホスト自体にアクセスが届いていない可 …

no image

短いコードを書く

私が普段コードを書くときに考えていることは常にいかに短くかけるか、ということといかにバグを生み出さないかということです。 基本的にはできるだけ、短くシンプルに書くようにしています。 そうすることであと …

no image

シェル基礎2

シェルコマンド使い始めて数年たちますが、いまだに知らないことはおおいですし、早く知っとけばよかった的なこともたくさんあります。 そんな小ネタ集を alias よく使うコマンドを別名で登録することができ …

no image

新しいプロジェクトに入った時にやること

新しいプロジェクトに入った時に最初にすべきことややっておくことなど Contents1 仕様理解編1.1 ユーザーの行動遷移の理解1.2 キー系のデータの理解1.3 データグルーピング1.4 サンプル …

アーカイブ