我在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天)。有没有办法做到这一点?
非常感谢您阅读本文。
答案 0 :(得分:1)
创建AFTER INSERT
触发器,它将为您完成任务:
DELIMITER $$
CREATE TRIGGER set_expiration_date
AFTER INSERT ON `LibraryManager` FOR EACH ROW
BEGIN
UPDATE LibraryManager
SET card_expiredDate = DATE_ADD(NEW.card_registerDate, INTERVAL 30 DAY)
WHERE card_id = NEW.card_id;
END;
$$
DELIMITER ;
PS:我还没有测试过,如果你有任何错误,请告诉我。
答案 1 :(得分:1)
使用create语句设置expiry列的默认值是不可能的,而是使用trigger。为此,您将需要稍微修改您的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或者你正在使用的后端以编程方式设置这些值。
相关: