MySQLでの日付スタンプタイムスタンプの使用の概要

    タイムスタンプタイムスタンプタイプはmysqlデータベースでより一般的ですが、その特性のいくつかを見落とすのは簡単です。インタビューで私は損失を被りました。ここに彼の使用法と特性のいくつかの補足があります。また、自分をより深くします。一般的に言って、私たちは日付を使用し、一般的に日付を使用し、または日時を使用し、時間を使用する場合にのみ時間を使用します。

    次に、タイムスタンプと日時の違いを大まかに説明します。

     1.それらはすべて日付と時刻を表すことができます。デフォルトの形式は「YYYY-MM-DD HH:MM:SS」で、すべて今すぐ渡すことができます()または '20200307225430'または '2020-03-07 22:54:30'など。値を設定する値。

     2.それらが表す時間範囲は異なります。タイムスタンプは、UTC 1970-01-01 00:00:01-2038-01-19 03:14:07を表し、北京時間(東8区)を表します。 、それは1970-01-01 08:00:01-2038-01-19 11:14:07である時間に+8である必要があります。日時の時間範囲は1000-01-01 00:00:00-9999-12-31 23:59:59です。

     3.デフォルトでは、タイムスタンプのデフォルト値はcurrent_timestamp(現在の時刻)であり、変更されるたびに自動的に更新されます。手動で値を変更しない限り、日時は自動的に更新されません。

   設定値については、次のSQL実行結果を見てください。

mysql> update users set name='aaaa',create_date=now(),modify_date=now();
Query OK, 3 rows affected (0.05 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> select * from users;
+----+------+---------------------+---------------------+
| id | name | create_date         | modify_date         |
+----+------+---------------------+---------------------+
|  1 | aaaa | 2020-03-07 22:56:53 | 2020-03-07 22:56:53 |
|  2 | aaaa | 2020-03-07 22:56:53 | 2020-03-07 22:56:53 |
|  3 | aaaa | 2020-03-07 22:56:53 | 2020-03-07 22:56:53 |
+----+------+---------------------+---------------------+
3 rows in set (0.00 sec)

mysql> update users set name='aaaa',create_date='20200307225730',modify_date=20200307225700;
Query OK, 3 rows affected (0.05 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> update users set name='aaaa',create_date='2020-03-07 22:57:30',modify_date='2020-03-07 22:57:00';
Query OK, 0 rows affected (0.05 sec)
Rows matched: 3  Changed: 0  Warnings: 0

mysql> select * from users;
+----+------+---------------------+---------------------+
| id | name | create_date         | modify_date         |
+----+------+---------------------+---------------------+
|  1 | aaaa | 2020-03-07 22:57:30 | 2020-03-07 22:57:00 |
|  2 | aaaa | 2020-03-07 22:57:30 | 2020-03-07 22:57:00 |
|  3 | aaaa | 2020-03-07 22:57:30 | 2020-03-07 22:57:00 |
+----+------+---------------------+---------------------+
3 rows in set (0.00 sec)

    タイムスタンプの時間範囲については、次のSQLステートメントを介して感じることができます。

    最短時間:

mysql> update users set modifydate = '19700101080000' where id = 7;
1292 - Incorrect datetime value: '19700101080000' for column 'modifydate' at row 1
mysql> update users set modifydate = '19700101080001' where id = 7;
Query OK, 0 rows affected

    最大時間の場合: 

mysql> update users set modifydate = '20380119111408' where id = 6;
1292 - Incorrect datetime value: '20380119111408' for column 'modifydate' at row 1
mysql> update users set modifydate = '20380119111407' where id = 6;
Query OK, 0 rows affected

    以下では、タイムスタンプのデフォルトの状況と、レコードが変更されたときの更新の状況に注目します。

    デフォルトでは、他のデフォルト値を設定せずに列のタイプをタイムスタンプに設定します。彼のデフォルト値はcurrent_timestampです。後でレコードが変更されると、レコードは更新されます。テーブルステートメントを作成すると、それを感じることができます。

     

    デフォルトでは、modify_dateを設定するときはタイムスタンプのみを指定し、後で設定するデフォルト値はなく、変更するときは現在の時刻を指定します。ただし、ユーザーが作成したテーブルの作成を示すsqlステートメントから、彼はデフォルト値を参照しているように見え、レコードが変更されると更新されます。

    レコードを挿入し、レコードの名前を変更して、modify_dateの変更を確認します。

    

    テーブルの定義時にデフォルト値を指定し、更新時に更新しないようにして、タイムスタンプを日時と同じにすることができます。一度設定すると、自動更新ではなく手動で変更することによってのみ変更できます。

     

    この時点で、テーブル作成ステートメントを確認できます。

     

    この場合、列定義の後にon update current_timestampはありません。レコードが変更されても、現在の時刻は自動的に更新されません。

    もう1つの状況は、タイムスタンプのデフォルトの時刻を設定するときに、現在の時刻ではなく0000-00-00 00:00:00に設定できることです。後でレコードが変更されると、現在の時刻が自動的に更新されます。タイムスタンプで示される時間範囲は1970-01-01 00:00:01からですが、デフォルト値は0000-00-00 00:00:00に設定することもできますが、これも非常に奇妙ですが、実際はそうです。次に、テーブル構造を変更し、レコードを挿入して、レコードを変更します。

    

    テーブル構築ステートメントをもう一度見て、タイムスタンプを設定するこの方法の特別な点を見つけることもできます。

     

    テーブルを作成したときに、update current_timestampでのみ指定し、デフォルト値を設定しなかったことがわかります。しかし、彼が生成した最後の値は、デフォルト値「0000-00-00 00:00:00」を生成しました。

    要約すると、タイムスタンプには次の特性があります。

    1.時間範囲:1970-01-01 00:00:01 ----- 2038-01-19 03:14:07

    2.デフォルトでは、テーブル構築ステートメントは、タイムスタンプがタイムスタンプのデフォルトcurrent_timestamp on update current_timestampと同等であることのみを指定します。 

現在の時刻であるデフォルト値があり、後でレコードを変更するときに、値を手動で指定する必要がなく、自動的に更新できます。

     3.指定した値を受け入れ、レコードを更新せずに変更するように設定できます。パフォーマンスは日時と同じです。

     4、更新時のタイムスタンプcurrent_timestampとtimestamp not nullデフォルト '0000-00-00 00:00:00'更新時current_timestamp等価。

529件の元の記事を公開 287 件を賞賛 144万回の再生

おすすめ

転載: blog.csdn.net/feinifi/article/details/104710836