【问题标题】:MySQL Trigger that calls a procedure for setting a date调用用于设置日期的过程的 MySQL 触发器
【发布时间】:2016-05-22 11:11:53
【问题描述】:

如果在插入语句中没有设置日期,我有一个触发器来设置日期,如下所示:

CREATE TRIGGER checkData
BEFORE INSERT ON students
FOR EACH ROW
BEGIN
    IF NEW.schoolDate is null THEN
        SET NEW.schooldate=date(now());
    END IF;
END;

效果很好。但现在我想将其包含在这样的过程中:

create procedure checkdate(setDate date)
begin
    if setDate is null then
                set setDate = date(now());
    end if;
END;

我将触发器更改为:

CREATE TRIGGER checkData
BEFORE INSERT ON students
FOR EACH ROW
BEGIN
    call checkdate(NEW.schoolDate);
END;

但这不再起作用了,有什么可以帮忙的吗?

【问题讨论】:

标签: mysql triggers procedure


【解决方案1】:

使用默认值而不是触发器。将表结构改为

create table students
(
    ...
    schoolDate datetime not null default current_timestamp,
    ...
)

然后您可以插入带有日期集的数据,如果您不提供日期,则将使用默认日期。

【讨论】:

  • 是的,但是有没有办法用触发器解决这个问题?我只是想知道为什么我的解决方案不起作用。
  • 我的猜测是你给过程一个值而不是一个参考。该值被复制到过程中并发生更改,并且您要更改的原始列不受此影响,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多