如何在插入时自动将日期设置为当前日期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在插入时自动将日期设置为当前日期相关的知识,希望对你有一定的参考价值。

我有下表

CREATE TABLE ex(
 id INTEGER PRIMARY KEY,
 dat DATE NOT NULL CHECK(dat IS date(dat))
);

我想在每次插入时自动将dat设置为date('now')。这就是我创建TRIGGER的原因

CREATE TRIGGER setTrigger
         AFTER INSERT
            ON ex
FOR EACH ROW
BEGIN   
    UPDATE ex   
        SET dat = date('now')
    WHERE id = NEW.id;
END;

但是我收到以下错误:

too many levels of recursion

我怎样才能解决这个问题 ?

答案

尝试删除FOR EACH ROW,没有必要,这可能是递归和CHECK约束的原因。

当然,您甚至不需要TRIGGER或CHECK约束

CREATE TABLE ex(
 id INTEGER PRIMARY KEY,
 dat DATE DEFAULT CURRENT_DATE
);

请注意只需要两列你需要做INSERT INTO ex (ID) VALUES(null);

您可能还想考虑以下事项: -

最大触发递归深度

SQLite限制了触发器的递归深度,以防止涉及递归触发器的语句使用无限量的内存。

在SQLite版本3.6.18(2009-09-11)之前,触发器不是递归的,因此这个限制毫无意义。从版本3.6.18开始,支持递归触发器,但必须使用PRAGMA recursive_triggers语句显式启用。从版本3.7.0(2009-09-11)开始,默认情况下启用递归触发器,但可以使用PRAGMA recursive_triggers手动禁用。只有在启用递归触发器时,SQLITE_MAX_TRIGGER_DEPTH才有意义。

默认的最大触发器递归深度为1000。

Maximum Depth Of Trigger Recursion

另一答案

你不需要任何触发器。

CREATE TABLE `ex ` (  `id` INTEGER PRIMARY KEY,`dat` DATE NOT NULL DEFAULT (datetime('now')) )

以上是关于如何在插入时自动将日期设置为当前日期的主要内容,如果未能解决你的问题,请参考以下文章

word中如何取消日期自动更正

如何使用 Java / Hibernate 在 SQL 中自动插入当前日期

当前日期时间的计算列?

MySQL数据类型 - 日期和时间类型

PPT中如何自动更新日期?

Perl CGI 日期和时间选择器,自动填充当前日期和时间