valor update type not current_timestamp created_at created create mysql timestamp mysql-error-1293

update - mysql timestamp on insert



MySQL CURRENT_TIMESTAMP en crear y actualizar (9)

Quiero definir la tabla que tendrá 2 campos TIMESTAMP, algo como esto:

CREATE TABLE `msgs` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `msg` VARCHAR(256), `ts_create` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `ts_update` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP )

Cómo hacer esto evitando el error:

ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

El punto es mantener el comportamiento deseado de ts_create y ts_update en el esquema de la tabla.


Creo que es posible usando la técnica de abajo.

`ts_create` timestamp NOT NULL DEFAULT ''0000-00-00 00:00:00'', `ts_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP


Creo que tal vez quiera ts_create como datetime (por lo tanto, cambie el nombre -> dt_create) y solo ts_update como marca de tiempo? Esto asegurará que permanezca sin cambios una vez establecido.

Mi entendimiento es que datetime es para valores controlados manualmente, y la marca de tiempo es un poco "especial" en el sentido en que MySQL la mantendrá para usted. En este caso, datetime es, por lo tanto, una buena opción para ts_create.


Estás utilizando una versión de MySql más antigua. Actualice su myqsl a 5.6.5+ funcionará.


Esta es la pequeña limitación de Mysql en la versión anterior, en realidad después de que la versión 5.6 y más adelante funcionen las múltiples marcas de tiempo ...


Esta es una limitación de mySQL, no puede tener dos columnas TIMESTAMP con valores predeterminados que hagan referencia a CURRENT_TIMESTAMP. La única forma de hacerlo sería usar un tipo DATETIME para ts_create que desafortunadamente no puede tener un valor predeterminado de NOW (). Sin embargo, puedes hacer rodar tu propio gatillo para que eso suceda.



Supongo que este es un post antiguo, pero en realidad creo que mysql admite 2 TIMESTAMP en sus ediciones recientes mysql 5.6.25, eso es lo que estoy usando a partir de ahora.


Yo diría que no es necesario tener DEFAULT CURRENT_TIMESTAMP en su ts_update: si está vacío, entonces no se actualiza, por lo que su ''última actualización'' es ts_create.


puede probar esto ts_create TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ts_update TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP