Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

567
Vistas
Configurar una columna en MySQL/MariaDB para actualizar una columna INT(11) con unix_timestamp()

¿Es posible configurar una columna en MySQL para actualizar automáticamente una columna INT (11) con el valor actual de la marca de tiempo de Unix en una ACTUALIZACIÓN ? Intenté todo y parece que no puedo hacerlo funcionar. Puedo hacer que funcione como un valor predeterminado en una inserción usando unix_timestamp() .

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No.

Solo los tipos de datos de timestamp de tiempo y datetime y hora admiten la cláusula on update .

Sin embargo, en versiones recientes de MySQL, puede combinar una columna de timestamp de tiempo actualizada automáticamente con una columna calculada que la convierte en una marca de tiempo de Unix, lo que evita la necesidad de un disparador:

 create table mytable ( id int primary key, -- auto-updated timestamp colum update_ts timestamp on update current_timestamp, -- unix timestamp computed from the timestamp unix_update_ts int as (timestampdiff(second, '1970-01-01', update_ts)) );

Tenga en cuenta que no podemos usar unix_timestamp() en una columna calculada a partir de ahora; MySQL parece asumir que los resultados de esta función no son deterministas (lo que no es correcto cuando la función recibe un argumento fijo), pero podemos solucionar esto con timestampdiff() .

over 4 years ago · Santiago Trujillo Denunciar

0

Puede hacer esto con una columna DATETIME o TIMESTAMP:

 CREATE TABLE mytable ( id SERIAL PRIMARY KEY, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP() );

Luego puede consultarlo para obtener la marca de tiempo de UNIX de esta manera:

 SELECT UNIX_TIMESTAMP(timestamp) AS ts FROM mytable;

MySQL 5.7 ha generado columnas, pero no funciona con funciones no deterministas:

 mysql> ALTER TABLE mytable ADD COLUMN ts INT UNSIGNED AS (UNIX_TIMESTAMP(timestamp)); ERROR 3102 (HY000): Expression of generated column 'ts' contains a disallowed function.

Podrías definir un disparador:

 mysql> ALTER TABLE mytable ADD COLUMN ts INT UNSIGNED; mysql> CREATE TRIGGER ts BEFORE UPDATE ON mytable FOR EACH ROW SET NEW.ts = UNIX_TIMESTAMP(NEW.timestamp); mysql> select * from mytable; +----+---------------------+------+ | id | timestamp | ts | +----+---------------------+------+ | 2 | 2020-07-23 23:09:57 | NULL | +----+---------------------+------+ mysql> update mytable set id = 3; mysql> select * from mytable; +----+---------------------+------------+ | id | timestamp | ts | +----+---------------------+------------+ | 3 | 2020-07-23 23:14:05 | 1595546045 | +----+---------------------+------------+

También debe crear un disparador coincidente antes de insertarlo.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda