MySQL two column timestamp default NOW value ERROR 1067

前端 未结 4 1727
耶瑟儿~
耶瑟儿~ 2020-12-30 15:09

I have table as shown below. In order to workaround one default now column restriction of MySQL I used the tip as shown here

CREATE  TABLE IF NOT E         


        
4条回答
  •  离开以前
    2020-12-30 15:44

    You can only have one timestamp column that defaults to CURRENT_TIMESTAMP or NOW() per table. This is a well known bug in MySQL.

    To overcome this, make your default for the created column a valid timestamp value, then insert the timestamp in your CRUD application code. Use NOW() or CURRENT_TIMESTAMP for your updated column default.

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

    To further illustrate MySQL's shortcoming in this area, consider the following code:

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

    The output from this will display:

    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.
    

    This is a bummer because using a trigger in this instance would be a good work around.

提交回复
热议问题