使用MySQL工作台,我在尝试执行以下语句时遇到奇怪的行为:
UPDATE Jobs SET Customer = 'Ben' WHERE PO = 1011;
其输出为:错误代码:1054。未知列' Jobs.PO'在' where子句'
这里的目标是获取更新语句或等效语句来执行。我无法确定问题。以下陈述的特别奇怪之处在于:
SELECT * FROM Jobs;
SELECT PO FROM Jobs;
SELECT * FROM Jobs where PO = 1011;
SELECT PO FROM Jobs where PO = 1011;
所有功能完全符合预期。具体来说,没有错误,返回并显示所有要求的条目。为什么选择在没有1054错误的情况下执行,而更新可以<?p?
create table语句(如果它有用),通过工作台作为SQL脚本执行:
CREATE TABLE `Jobs` (
PO MEDIUMINT NOT NULL,
Part TINYINT UNSIGNED NOT NULL DEFAULT 1,
`Last Dash` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
Customer VARCHAR(80),
Description VARCHAR(350),
Completed DATE,
Notes VARCHAR(350),
CONSTRAINT pkJobs PRIMARY KEY (PO, Part)
);
EDIT :: 也许并不像我原先解释的那么简单。更新前有一个&#39;在桌子上触发。
DELIMITER //
DROP TRIGGER IF EXISTS JobsUp //
CREATE TRIGGER JobsUp BEFORE UPDATE ON Jobs FOR EACH ROW
BEGIN
IF new.`Last Dash` < (SELECT MAX(Dash)
FROM Tracking AS t
WHERE new.PO = t.PO
AND new.Part = t.Part
) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT =
'Cannot update last dash to value less than an assigned dash.';
END IF;
END //
DELIMITER ;
答案 0 :(得分:0)
想出来。数据库是根据之前的JobsUp触发器定义操作的,该触发器没有使用'new'关键字。重新创建触发器解决了这个问题。