sql >> Databasteknik >  >> RDS >> Mysql

MySQL två kolumner tidsstämpel standardvärde NU FEL 1067

Du kan bara ha en tidsstämpel kolumn som är standard till CURRENT_TIMESTAMP eller NOW() per bord. Detta är en välkänd bugg i MySQL.

För att övervinna detta, gör din standard för den skapade kolumnen till ett giltigt tidsstämpelvärde och infogar sedan tidsstämpeln i din CRUD-applikationskod. Använd NOW() eller CURRENT_TIMESTAMP för din uppdaterade kolumnstandard.

Referensmaterial:http://dev.mysql.com/doc/ refman/5.1/en/timestamp.html

För att ytterligare illustrera MySQL:s brist på detta område, överväg följande kod:

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

Utdata från detta kommer att visa:

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.

Det här är en bummer eftersom att använda en trigger i det här fallet skulle vara en bra lösning.



  1. CI - visa databasfel eller misslyckas

  2. GROUP och COUNT() åldrar i CakePHP

  3. Varför skapar inte postgres databasen?

  4. Returnera antalet rader som påverkas av UPDATE-satser