sql >> Base de Datos >  >> RDS >> Mysql

MySQL marca de tiempo de dos columnas valor predeterminado AHORA ERROR 1067

Solo puedes tener uno columna de marca de tiempo que por defecto es CURRENT_TIMESTAMP o NOW() por mesa. Este es un error bien conocido en MySQL.

Para superar esto, haga que su valor predeterminado para la columna creada sea un valor de marca de tiempo válido, luego inserte la marca de tiempo en el código de su aplicación CRUD. Use NOW() o CURRENT_TIMESTAMP para su columna predeterminada actualizada.

Material de referencia:http://dev.mysql.com/doc/ refman/5.1/en/timestamp.html

Para ilustrar aún más la deficiencia de MySQL en esta área, considere el siguiente código:

CREATE TABLE testing_timestamps (
  id INT NOT NULL AUTO_INCREMENT,
  pk_id INT NOT NULL,
  col1 TIMESTAMP DEFAULT 0,
  col2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY(id)
);

delimiter $$
CREATE TRIGGER testing_timestamps_trigger
  AFTER INSERT ON testing_timestamps
  FOR EACH ROW 
  BEGIN
    UPDATE testing_timestamps SET col1 = NOW() WHERE id = MAX(id);
  END;
$$
delimiter ;

INSERT INTO testing_timestamps (id) VALUES (0);

El resultado de esto mostrará:

mysql> INSERT INTO testing_timestamps (id) VALUES (0);
ERROR 1442 (HY000): Can't update table 'testing_timestamps' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Esto es un fastidio porque usar un disparador en este caso sería una buena solución.