如果其他插入列值为真,MYSQL 插入时触发将日期条件设置为现在

问题描述 投票:0回答:1

我正在尝试了解更多有关触发器的信息。 订桌时

CREATE TABLE orders
 (
 id INT unsigned not null auto_increment,
 tag INT unsigned not null,
 entered datetime default current_timestamp,
 completed boolean not null default false,
 payed boolean not null default false,
 payDate date,
 pickedUp boolean not null default false,
 pickUpDate date,
 workType enum('job0', 'job1', 'Custom') not null,
primary key (id)
 )

我的目标是,如果订单在下单时付款,则将条目上的 payDate 值设置为

curdate()
;如果尚未付款,则将其留空(默认)

我尝试了多种触发器措辞,但这是最终结果:

CREATE TRIGGER payDate_onEnter 
 BEFORE INSERT ON orders
 FOR EACH ROW
  BEGIN
    IF new.payed is TRUE then
        new.payDate := curdate();
    END IF;
 END;

MySql 工作台告诉我:

  • new.payDate := curdate();
    ->“。”在此位置无效,需要标识符
  • final
    END;
    -> 在此位置无效,期待 EOF ....

我检查了很多网站和问题,包括this

请帮助我了解问题所在

mysql triggers
1个回答
0
投票

不需要触发器。

CREATE TABLE orders
 (
 id INT unsigned not null auto_increment,
 tag INT unsigned not null,
 entered datetime default current_timestamp,
 completed boolean not null default false,
 payed boolean not null default false,
 payDate date DEFAULT ((CASE WHEN payed THEN CURRENT_DATE END)),
 pickedUp boolean not null default false,
 pickUpDate date,
 workType enum('job0', 'job1', 'Custom') not null,
primary key (id)
 )
INSERT INTO orders (tag, payed, workType) VALUES
(1, FALSE, 1),
(2, TRUE, 2);
SELECT * FROM orders;
id 标签 已进入 已完成 已付款 付款日期 拾起 提货日期 工作类型
1 1 2024-11-01 16:39:35 0 0 0 工作0
2 2 2024-11-01 16:39:35 0 1 2024-11-01 0 工作1

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.