在mySQL中将timestamp列的默认值设置为2时间戳的总和?

时间:2016-04-23 07:54:58

标签: mysql

我在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天)。有没有办法做到这一点? 非常感谢您阅读本文。

2 个答案:

答案 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或者你正在使用的后端以编程方式设置这些值。

相关:

Can I use a function for a default value in MySql?