sql >> Database teknologi >  >> RDS >> Mysql

MySQL tidsstempel med to kolonners standard NU-værdi FEJL 1067

Du kan kun have én tidsstempelkolonne, der som standard er CURRENT_TIMESTAMP eller NOW() per bord. Dette er en velkendt fejl i MySQL.

For at overvinde dette skal du gøre din standard for den oprettede kolonne til en gyldig tidsstempelværdi, og derefter indsætte tidsstemplet i din CRUD-applikationskode. Brug NOW() eller CURRENT_TIMESTAMP for din opdaterede kolonnestandard.

Referencemateriale:http://dev.mysql.com/doc/ refman/5.1/da/timestamp.html

For yderligere at illustrere MySQL's mangel på dette område, overvej følgende kode:

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

Outputtet fra denne vil vise:

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.

Dette er en nederdel, fordi det ville være en god løsning at bruge en trigger i dette tilfælde.



  1. 'IF' i 'SELECT'-sætning - vælg outputværdi baseret på kolonneværdier

  2. JSON_MODIFY() Eksempler i SQL Server (T-SQL)

  3. Hvordan REGEXP_SUBSTR() virker i MariaDB

  4. Hvordan gemmer jeg en streng længere end 4000 tegn i en Oracle-database ved hjælp af Java/JDBC?