gpt4 book ai didi

mysql - INSERT 语句的动态值选择

转载 作者:行者123 更新时间:2023-11-29 00:15:03 25 4
gpt4 key购买 nike

所以我的问题如下。我有一个 timeStatus 列,它将在 INSERT 语句中具有两个值之一,'pending' 或 'never',具体取决于列 fromDate 是否为 NULL。

我已经做了这个准备好的声明,它不起作用但代表了我的意图。另一方面,我不确定这里是否有约束条件,而不是在语句中指定约束条件。这样我就可以指定插入或更新的状态值,并且表会知道该做什么。但是,我需要一些指导,以了解使用哪种方法以及去哪里学习它。

声明如下:

INSERT INTO Bservices (
servStatus, timeStatus,
fromDetails, fromDate, fromTime)
VALUES(
'pending', IF(ISNULL(`fromDate`)) 'pending' ELSE 'never',
'a', '', '')

预期行为如下:

ON INSERT
if(fromDate == '') {
timeStatus = 'pending'
} else {
timeStatus = 'never'
}

ON UPDATE
if(timeStatus == 'pending' && fromDate != '') {
timeStatus = 'updated'
}

最佳答案

当您对 INSERT 语句的 VALUES 子句中的表达式执行此操作时,这不起作用,因为表达式是在创建行之前计算的。因此所有列自然都是 NULL。

为了做你想做的事,你需要在插入前和更新前写触发器。类似下面的内容,虽然我还没有测试过,所以我会把调试留给你:

CREATE TRIGGER insBservices
BEFORE INSERT ON Bservices
FOR EACH ROW
SET NEW.timeStatus = IF(NEW.fromDate IS NULL, 'pending', 'never');

CREATE TRIGGER updBservices
BEFORE UPDATE ON Bservices
FOR EACH ROW
SET NEW.timeStatus = IF(NEW.fromDate IS NOT NULL AND OLD.timeStatus = 'pending',
'updated', NEW.timeStatus);

回复你的评论:

如果你想了解更多有关触发器的知识,MySQL 手册实际上在这方面很薄弱。他们向您展示了供引用的语法,但示例不多。有很多棘手的部分。

例如,了解在定义触发器时何时使用 DELIMITER,以解决触发器主体内的分号与 CREATE TRIGGER 的终止符之间的歧义> 声明本身。这也适用于 CREATE PROCEDURECREATE FUNCTION

我在对 Create function through MySQLdb 的回答中写了一个例子和解释.

触发器有教程,例如:

关于mysql - INSERT 语句的动态值选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23298667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com