mysql - 如何使用触发器在 MySQL 中的空列中插入当前日期?

标签 mysql date if-statement triggers insert

我的表(Report_table)有以下列: ID、标题、文本、日期。

通过我的应用程序,我输入了标题和文本。 数据库会在插入时自动设置 ID,但我还想使用触发器自动插入每个报告的日期。

我有点困惑。这是我的建议,但这行不通:

DELIMITER //
CREATE TRIGGER trRDate
BEFORE INSERT ON Report_table
FOR EACH ROW

BEGIN

IF (Date IS NULL or Date = '')  THEN
SET NEW.Date = CURDATE();
END IF;

END; //
DELIMITER ;

所以基本上,如果日期列为空(确实如此),那么触发器应该插入一个日期。

最佳答案

在 MySQL 中,触发器无法修改调用它的表,因此您当前的方法行不通。但是从 MySQL 5.6.5 开始,您可以为 datetime 列指定动态默认值。

您可以按如下方式更改 Report_table 表中的 Date 列:

ALTER TABLE Report_table CHANGE `Date` `Date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

这意味着如果您在插入 Report_table 期间未指定日期,则当前时间戳将用作默认时间。

另一个同样有用的选项是从您的申请中分配默认日期。

关于mysql - 如何使用触发器在 MySQL 中的空列中插入当前日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41077472/

相关文章:

php - 使用选择选项 php 插入数据库信息

mysql - 在奇怪的情况下分配之前引用的局部变量

php - 如何获得对年份敏感的日历周?日期 ("W") 返回 1 月 1 日的 52

javascript - jquery datepicker 获取日期格式

用于空搜索的php else语句

Java 格式化以获取最后计数

php - Sql 查询在 sql Workbench 中按预期工作,但添加到 php 文件时加载时间极长

PHP 数组 mysql 检索每条记录(第 2 部分)

javascript - 相当于 PHP gmdate

c++ - 在 For 循环中使用 {} 且不使用 {} 的 If 语句