私は自分のテーブルにタイムスタンプの列を使用し、自動更新機能を使用しています。私は何を期待してることは同じ列の値でも更新されるMySQLの `timestamp`
created_at
列が時間とともに初期化されるように、ということであるmysql> desc user_rides; +------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+-------------------+-----------------------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user_id | int(11) | NO | MUL | NULL | | ride_cnt | int(11) | YES | | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | | | updated_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +------------+--------------+------+-----+-------------------+-----------------------------+ 5 rows in set (0.02 sec)
、行が作成されると
updated_at
列であるために:ここに私のテーブルスキーマですcreated_at
と同じであり、いずれかの列(基本的にはride_cnt
)が更新されると更新されます。
これは素晴らしいです。
でも、ride_cnt
が同じ値を持っていてもupdated_at
が更新されることが予想されます。そこで、行の値が最後にフェッチされた時点を追跡して、それ以降の実行を無視することができます。例えば
:ride_cnt
= 0と
行は、我々は、更新を実行した最新の時刻で更新します。行が無視されて再初期化されることがあります。
タイムスタンプを手動で渡すことなくこれを達成できる方法はありますか?
編集:何が起こっている。ここ
、
mysql> insert into user_ride set user_id=7445, user_ride=0;
Query OK, 1 row affected (0.01 sec)
mysql> insert into user_ride set user_id=7009, user_ride=2;
Query OK, 1 row affected (0.00 sec)
mysql> select * from user_ride;
+----+---------+-----------+---------------------+---------------------+
| id | user_id | user_ride | created_at | updated_at |
+----+---------+-----------+---------------------+---------------------+
| 1 | 7445 | 0 | 2017-06-13 10:44:05 | 2017-06-13 10:44:05 |
| 2 | 7009 | 2 | 2017-06-13 10:44:18 | 2017-06-13 10:44:18 |
+----+---------+-----------+---------------------+---------------------+
2 rows in set (0.00 sec)
mysql> update user_ride set user_ride=0 where id=1;
Query OK, 0 rows affected (0.01 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> select * from user_ride;
+----+---------+-----------+---------------------+---------------------+
| id | user_id | user_ride | created_at | updated_at |
+----+---------+-----------+---------------------+---------------------+
| 1 | 7445 | 0 | 2017-06-13 10:44:05 | 2017-06-13 10:44:05 |
| 2 | 7009 | 2 | 2017-06-13 10:44:18 | 2017-06-13 10:44:18 |
+----+---------+-----------+---------------------+---------------------+
2 rows in set (0.00 sec)
mysql> update user_ride set user_ride=1 where id=1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from user_ride;
+----+---------+-----------+---------------------+---------------------+
| id | user_id | user_ride | created_at | updated_at |
+----+---------+-----------+---------------------+---------------------+
| 1 | 7445 | 1 | 2017-06-13 10:44:05 | 2017-06-13 10:45:26 |
| 2 | 7009 | 2 | 2017-06-13 10:44:18 | 2017-06-13 10:44:18 |
+----+---------+-----------+---------------------+---------------------+
2 rows in set (0.00 sec)
トリガーを試しましたか? – Namphibian
レコード内の同じ値を使用して更新すると、更新が行われ、現在のタイムスタンプは更新されます。私はここに何かを逃していますか –
@TimBiegeleisen、私も同じと思っていましたが、そうではありません。追加された例。 – avisheks