【发布时间】:2011-09-28 10:50:52
【问题描述】:
我想创建一个表,其中既有“created”列,又有“updated”列。 “创建”列将在插入时设置并且永远不会更改。每次更新行时,“已更新”列都会更改。我不想在随后的 INSERT 或 UPDATE 语句中弄乱这些列中的任何一个。那么,如果我以这样的方式开始,我的 CREATE TABLE 语句应该是什么样的呢?
CREATE TABLE IF NOT EXISTS `mydb`.`mytable` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`updated` TIMESTAMP,
`created` TIMESTAMP,
`deleted` TINYINT DEFAULT 0,
`notes` TEXT DEFAULT '',
`description` VARCHAR(100)
) TYPE=innodb;
我似乎在创建包含两个 TIMESTAMP 列的表时遇到问题。我不在乎这些列是 TIMESTAMP 还是 DATETIME 或其他什么,我只是希望它们由 MySQL 填充,而不需要来自 insert 或 update 语句的显式指令。
我希望能够像这样插入:
INSERT INTO `mydb`.`mytable` (notes,description) VALUES ('some note','some description');
还有这样的更新:
UPDATE `mydb`.`mytable` SET notes=CONCAT(notes,'some more notes') WHERE id=1;
两者都无需在插入或更新语句中显式设置“已创建”列或设置(或重置)“更新”列。
【问题讨论】:
-
每次发生更新时,您都需要一个 ON UPDATE 触发器来更新“已更新”列。我会用一个完整的例子来回答,但我不知道这在 MySQL 中是如何完成的,因为这些天我只使用 PostgreSQL。但我确信 MySQL 手册会为您提供完整的语法。
标签: mysql