ではここで、この挿入したレコードの「COL02」と「COL03」を更新するため、以下のようなUPDATE文を実行したとします。
UPDATE TABLE01 SET COL02 = '9999', COL03 ='9999' WHERE COL01='1000'
この時も「COL04」には、この更新を行った時の日付時刻を記録したいとします。ところが、PostgreSQLの「COL04」には、更新した日付時刻は記録されず挿入時の値そのままで変更されません。PostgreSQLは、デフォルト制約を使用してこの仕組みを実現しているため、あくまでも「COL04」内に日付時刻が自動的に記録されるのは、レコードの挿入時のみに限定されるからです。この更新をPostgreSQLにて行う場合は、「COL04」にその時の日付時刻を明示する必要があり、それは以下のようなUPDATE文になります。
UPDATE TABLE01
SET COL02 = '9999', COL03 ='9999',COL04=now() WHERE COL01='1000'
この例では、現在の日付時刻の値を生成する関数「now()」を使用して、「COL04」の値を更新しています。
一方MySQLの場合は、期待通りに「COL04」に更新した日付時刻が記録されます。MySQLのtimestamp型には、INSERTやUPDATEによって、現在の日付時刻を自動で記録する機能があるのです。この機能は、デフォルト制約の機能とは異なり、MySQL特有の機能です。
もし、この機能を使用したアプリケーションを他のRDBMS、例えばPostgreSQLへ適用した場合、期待とは異なる結果を生みます。さらに問題なのは、アプリケーションが使用するSQL文自体は正常動作し、格納されたデータを確認することによってはじめて結果が異なることが判明するため、問題点の検出に時間がかかる可能性があります。
|