vehiculo que primera primer pais origen optimizar nombres mundo marcas marca lista lentas fue cual consultas coches autos mysql sql timestamp

mysql - que - ¿Cuándo se actualiza una marca de tiempo(auto)?



optimizar consultas lentas mysql (5)

Si tengo una columna en una tabla de tipo TIMESTAMP y tiene como valor predeterminado: CURRENT_TIMESTAMP ¿esta columna se actualiza a la marca de tiempo actual si actualizo el valor de cualquier otra columna en la misma fila?
Parece que no, pero no estoy seguro de si esto es lo que debería suceder.
No puedo entender lo que esto significa ( de la documentación de MySQL ):

Si la columna se actualiza automáticamente, se actualiza automáticamente a la marca de tiempo actual cuando el valor de cualquier otra columna en la fila se cambia de su valor actual. La columna permanece sin cambios si todas las demás columnas están configuradas con sus valores actuales. Para evitar que la columna se actualice cuando otras columnas cambian, explícitamente establezca su valor actual. Para actualizar la columna incluso cuando otras columnas no cambian, configúrelo explícitamente en el valor que debería tener] 2


Agregando dónde encontrar UPDATE CURRENT_TIMESTAMP porque para las personas nuevas esto es una confusión.

La mayoría de las personas usará phpmyadmin o algo así.

Valor predeterminado que selecciona CURRENT_TIMESTAMP

Atributos (un menú desplegable diferente) que selecciona ACTUALIZAR CURRENT_TIMESTAMP


Agregar un desencadenador en la base de datos:

DELIMITER // CREATE TRIGGER update_user_password BEFORE UPDATE ON users FOR EACH ROW BEGIN IF OLD.password <> NEW.password THEN SET NEW.password_changed_on = NOW(); END IF; END // DELIMITER ;

El tiempo de cambio de contraseña se actualizará solo cuando se cambie la columna de contraseña.


Creo que tienes que definir la columna de marca de tiempo como esta

CREATE TABLE t1 ( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );

Mira aquí


Dale al comando SHOW CREATE TABLE whatever

Luego mira la definición de la tabla.

Probablemente tiene una línea como esta

logtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

en eso. DEFAULT CURRENT_TIMESTAMP significa que cualquier INSERT sin un ajuste de sello de tiempo explícito utiliza la hora actual. Del mismo modo, ON UPDATE CURRENT_TIMESTAMP significa que cualquier actualización sin una marca de tiempo explícita da como resultado una actualización del valor actual de la marca de tiempo.

Puede controlar este comportamiento predeterminado al crear su tabla.

O bien, si la columna de marca de tiempo no se creó correctamente en primer lugar, puede cambiarla.

ALTER TABLE whatevertable CHANGE whatevercolumn whatevercolumn TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

Esto causará que las operaciones INSERTAR y ACTUALIZAR en la tabla automáticamente actualicen su columna de marca de tiempo. Si desea actualizar whatevertable sin cambiar la marca de tiempo, es decir,

Para evitar que la columna se actualice cuando cambien otras columnas

entonces necesitas emitir este tipo de actualización.

UPDATE whatevertable SET something = ''newvalue'', whatevercolumn = whatevercolumn WHERE someindex = ''indexvalue''

Y esto funciona solo con columnas TIMESTAMP , no con columnas DATETIME o DATE . Dado que las columnas son TIMESTAMP , se tienen en cuenta las zonas horarias: en una máquina servidor configurada correctamente, esos valores siempre se almacenan en UTC y se traducen a la hora local en el momento de la recuperación.


Una columna actualizada automáticamente se actualiza automáticamente a la marca de tiempo actual cuando el valor de cualquier otra columna en la fila se cambia desde su valor actual. Una columna de actualización automática permanece sin cambios si todas las otras columnas están configuradas con sus valores actuales.

Para explicarlo, imaginemos que tiene solo una fila:

------------------------------- | price | updated_at | ------------------------------- | 2 | 2018-02-26 16:16:17 | -------------------------------

Ahora, si ejecuta la siguiente columna de actualización:

update my_table set price = 2

no cambiará el valor de updated_at, ya que el valor del precio en realidad no se modificó (ya era 2).

Pero si tiene otra fila con un valor de precio distinto de 2, el valor actualizado de esa fila (con precio <> 3) se actualizará a CURRENT_TIMESTAMP.