我正在尝试了解更多有关触发器的信息。 订桌时
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();
->“。”在此位置无效,需要标识符END;
-> 在此位置无效,期待 EOF ....我检查了很多网站和问题,包括this
请帮助我了解问题所在
不需要触发器。
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 |