mysql - 在 mySQL 中将时间戳列的默认值设置为 2 时间戳之和?

标签 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 天)。有什么办法可以做到这一点吗? 非常感谢您阅读本文。

最佳答案

使用 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?

关于mysql - 在 mySQL 中将时间戳列的默认值设置为 2 时间戳之和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36808191/

相关文章:

php 仅显示来自 db 的两个条目

C# linq 左连接

spring 数据源中的 java.lang.NullPointerException

mysql - 错误 1215 (HY000) 在第 13 行 : Cannot add foreign key constraint

mysql - 如何在映射表中显示用户的名称而不是 ID?

mysql - Yii2 - 根据相关表中的计数检索模型

PHP在SQL中插入未知行数

php - 将 mysql 结果(大关联数组)转换为嵌套数组

mysql - 我有两列需要大规模编辑。 mysql更新语句

mysql - 仅当字段不为空时如何添加where条件