1つしか持てません デフォルトがCURRENT_TIMESTAMP
のタイムスタンプ列 またはNOW()
テーブルごと。これはMySQLのよく知られたバグです。
これを克服するには、作成した列のデフォルトを有効なタイムスタンプ値にしてから、CRUDアプリケーションコードにタイムスタンプを挿入します。NOW()
を使用します。 またはCURRENT_TIMESTAMP
更新された列のデフォルト。
参考資料: http://dev.mysql.com/doc/ refman / 5.1 / en / timestamp.html
この分野でのMySQLの欠点をさらに説明するために、次のコードを検討してください。
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);
これからの出力は次のように表示されます:
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.
この場合にトリガーを使用すると適切な回避策になるため、これは残念です。