我在 mySQL 中创建了一个表,如下所示:
CREATE TABLE IF NOT EXISTS `LibraryManager`.`Card` (
`card_id` INT NOT NULL AUTO_INCREMENT,
`card_registerDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`card_expiredDate` TIMESTAMP,
PRIMARY KEY (`card_id`))
ENGINE = InnoDB;
现在我想将 card_expiredDate
的默认值设置为 card_registerDate
+ 30 或 CURRENT_TIMESTAMP + 30(从注册日期起 30 天)。有什么办法可以做到这一点吗?
非常感谢您阅读本文。
最佳答案
使用 create 语句设置到期列的默认值是不可能的,而是使用触发器。为此,您必须稍微修改您的创建语句。只需更改到期列的数据类型即可,您的新查询:
CREATE TABLE IF NOT EXISTS `LibraryManager`.`Card` (
`card_id` INT NOT NULL AUTO_INCREMENT,
`card_registerDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`card_expiredDate` DATETIME,
PRIMARY KEY (`card_id`))
ENGINE = InnoDB;
然后触发以下触发器
CREATE TRIGGER before_insert_library_card
BEFORE INSERT ON `LibraryManager`.`Card`
FOR EACH ROW
SET new.card_expiredDate = adddate(CURRENT_TIMESTAMP,30);
希望这有帮助。
P.S:触发器会减慢您的插入操作(或它们之前/之后应用的任何操作)。我建议您使用 php/python 或您正在使用的任何后端以编程方式设置这些值。
相关:
关于mysql - 在 mySQL 中将时间戳列的默认值设置为 2 时间戳之和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36808191/