sql >> Databáze >  >> RDS >> Mysql

Výchozí hodnota dvousloupcového časového razítka MySQL NOW ERROR 1067

Můžete mít pouze jeden sloupec časového razítka, který má výchozí hodnotu CURRENT_TIMESTAMP nebo NOW() na stůl. Toto je dobře známá chyba v MySQL.

Abyste tomu zabránili, nastavte jako výchozí hodnotu pro vytvořený sloupec platnou hodnotu časového razítka a poté vložte časové razítko do kódu aplikace CRUD. Použijte NOW() nebo CURRENT_TIMESTAMP pro váš aktualizovaný výchozí sloupec.

Referenční materiál:http://dev.mysql.com/doc/ refman/5.1/en/timestamp.html

Chcete-li dále ilustrovat nedostatek MySQL v této oblasti, zvažte následující kód:

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);

Výstup z tohoto zobrazí:

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.

To je průšvih, protože použití spouštěče v tomto případě by bylo dobré řešení.



  1. Měl bych používat PreparedStatements pro všechny vložky databáze v Javě?

  2. Mysql_real_escape_string() Varování Zmatek

  3. Souhrnné datové tabulky

  4. Oracle porovnává časové razítko s datem