Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Domyślna wartość TERAZ w dwóch kolumnach MySQL ERROR 1067

Możesz mieć tylko jeden kolumna sygnatury czasowej, która domyślnie jest ustawiona na CURRENT_TIMESTAMP lub NOW() na stół. To dobrze znany błąd w MySQL.

Aby rozwiązać ten problem, ustaw jako domyślną dla utworzonej kolumny prawidłową wartość znacznika czasu, a następnie wstaw znacznik czasu w kodzie aplikacji CRUD. Użyj NOW() lub CURRENT_TIMESTAMP dla zaktualizowanej domyślnej kolumny.

Materiał referencyjny:http://dev.mysql.com/doc/ refman/5.1/en/timestamp.html

Aby dokładniej zilustrować wady MySQL w tym obszarze, rozważ następujący 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);

Wynik z tego wyświetli:

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 jest bummer, ponieważ użycie wyzwalacza w tym przypadku byłoby dobrym obejściem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Opcje wyboru kanału z bazy danych w zależności od innych opcji wyboru

  2. Mysql Query ze zmienną mysql nie działa w Zend Framework 1

  3. Wybierz identyfikator ostatniej wstawki

  4. Ustaw strefę czasową w PHP i MySQL

  5. COUNT(id) vs. COUNT(*) w MySQL