Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Valor padrão NOW do timestamp de duas colunas do MySQL ERRO 1067


Você só pode ter um coluna timestamp que tem como padrão CURRENT_TIMESTAMP ou NOW() por mesa. Este é um bug bem conhecido no MySQL.

Para superar isso, torne seu padrão para a coluna criada um valor de carimbo de data/hora válido e insira o carimbo de data/hora no código do aplicativo CRUD. Use NOW() ou CURRENT_TIMESTAMP para seu padrão de coluna atualizado.

Material de referência:http://dev.mysql.com/doc/ refman/5.1/en/timestamp.html

Para ilustrar ainda mais a deficiência do MySQL nesta área, considere o seguinte 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);

A saída disso será exibida:
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.

Isso é uma chatice porque usar um gatilho nesse caso seria uma boa solução.