Resumen del uso de la marca de fecha y hora en mysql

    El tipo de marca de tiempo es más común en la base de datos mysql, pero es fácil pasar por alto algunas de sus características. He sufrido una pérdida en la entrevista. Aquí hay algunos suplementos para su uso y características. También hazte más profundo. En términos generales, usamos fecha, generalmente usamos fecha o fecha y hora, usamos tiempo solo cuando usamos el tiempo.

    Lo siguiente explica aproximadamente la diferencia entre la marca de tiempo y la fecha y hora:

     1. Todos pueden representar la fecha y la hora. El formato predeterminado es "AAAA-MM-DD HH: MM: SS", y todos pueden pasar ahora () o '20200307225430' o '2020-03-07 22:54:30' Valor para establecer el valor.

     2. Los rangos de tiempo que representan son diferentes: la marca de tiempo representa UTC 1970-01-01 00: 00: 01-2038-01-19 03:14:07, para nuestro horario de Beijing en China (Distrito 8 Este) , Debe ser +8 por hora, que es 1970-01-01 08: 00: 01-2038-01-19 11:14:07. El rango de fecha y hora es 1000-01-01 00: 00: 00-9999-12-31 23:59:59.

     3. De manera predeterminada, la marca de tiempo tiene un valor predeterminado de current_timestamp, que es la hora actual, y se actualizará automáticamente cada vez que se modifique. La fecha y hora no se actualizará automáticamente a menos que el valor se modifique manualmente.

   Para el valor de configuración, echamos un vistazo a los siguientes resultados de ejecución de 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)

    Para el rango de tiempo de la marca de tiempo, podemos sentirlo a través de la siguiente instrucción sql:

    Por tiempo mínimo:

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

    Por tiempo máximo: 

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

    A continuación nos centramos en la situación predeterminada de la marca de tiempo y la situación de actualización cuando se modifica el registro.

    De manera predeterminada, establecemos el tipo de columna en marca de tiempo sin establecer otros valores predeterminados. Su valor predeterminado es current_timestamp. Cuando el registro se modifica más tarde, se actualizará. Podemos sentirlo creando una declaración de tabla:

     

    Por defecto, cuando configuramos modify_date, solo especificamos la marca de tiempo, y no hay un valor predeterminado para configurar más tarde, y especificamos la hora actual cuando la modificamos. Sin embargo, podemos ver en la instrucción sql que muestran los usuarios de la tabla de creación, parece que se refiere al valor predeterminado y se actualizará cuando se modifique el registro.

    Insertamos un registro y luego modificamos el nombre del registro para ver el cambio de modify_date:

    

    Podemos especificar el valor predeterminado al definir la tabla y no actualizar cuando se actualiza, de modo que la marca de tiempo puede ser la misma que la fecha y hora. Una vez configurada, solo se puede cambiar más tarde mediante modificación manual en lugar de actualización automática.

     

    En este momento, podemos verificar la declaración de creación de tablas:

     

    En este caso, no hay ninguna actualización current_timestamp después de la definición de columna. No actualizará automáticamente la hora actual cuando se modifica el registro.

    Otra situación es que cuando establecemos la hora predeterminada de la marca de tiempo, podemos establecerla en 0000-00-00 00:00:00 en lugar de la hora actual. Cuando el registro se modifica más tarde, la hora actual se actualiza automáticamente. Aunque el rango de tiempo indicado por la marca de tiempo es de 1970-01-01 00:00:01, el valor predeterminado se puede establecer en 0000-00-00 00:00:00, que también es muy extraño, pero lo hace. Luego modificamos la estructura de la tabla, insertamos registros y modificamos registros:

    

    También podríamos volver a mirar la declaración de creación de tablas y descubrir qué tiene de especial esta forma de establecer la marca de tiempo:

     

    Vemos que cuando creamos la tabla, solo especificamos la actualización current_timestamp, y no establecimos el valor predeterminado, pero el último valor que generó generó un valor predeterminado de '0000-00-00 00:00:00'.

    En resumen, la marca de tiempo tiene las siguientes características:

    1. Rango de tiempo: 1970-01-01 00:00:01 ----- 2038-01-19 03:14:07

    2. De manera predeterminada, la instrucción de creación de tablas solo especifica que la marca de tiempo es equivalente a la marca de tiempo predeterminada current_timestamp en la actualización current_timestamp. 

Tiene un valor predeterminado, que es la hora actual. Cuando modifica el registro posteriormente, no necesita especificar manualmente el valor, puede actualizarse automáticamente.

     3. Puede aceptar el valor especificado, puede configurar el registro para que se modifique sin actualizar, y el rendimiento es el mismo que el de fecha y hora.

     4 、 marca de tiempo en la actualización current_timestamp 和 marca de tiempo no nulo predeterminado '0000-00-00 00:00:00' en la actualización current_timestamp 等价。

529 artículos originales publicados · 287 elogiados · 1.47 millones de visitas

Supongo que te gusta

Origin blog.csdn.net/feinifi/article/details/104710836
Recomendado
Clasificación