다음과 같이 주어진 테이블의 열을 업데이트하려고 시도 할 때 MySQL에서 오류가 발생하는 이유를 추적 할 수 없습니다.트리거가 MySQL 오류 1054를 일으키는 알 수없는 열
업데이트 쿼리는 다음과 같습니다
update jobitems set itemprice=itemprice/100;
오류 :
Error Code: 1054. Unknown column 'JobID' in 'where clause'
나는 jobitems의 트리거에서 다음 제거, 업데이트가 작동합니다.
DELIMITER $$
CREATE
DEFINER=`root`@`localhost`
TRIGGER `alacarte`.`jobitems_beforeupdate`
BEFORE UPDATE ON `alacarte`.`jobitems`
FOR EACH ROW
Begin
declare customer varchar(45);
Set @customer = (select CustomerID FROM jobs WHERE JobID=old.JobID);
If new.ItemCompleted<=>1
AND (select InvoiceStatus
FROM
(Select InvoiceStatus, CustomerID
FROM invoices
as custinvoices
Where [email protected])
as InvoiceStatus
WHERE InvoiceStatus='Open') IS NULL
then
insert into invoices
set
[email protected],
InvoiceBillToName=ifnull((select CustomerName FROM customers WHERE [email protected]),'-'),
InvoiceBillToAddress=etc;
당연히 jobs 테이블에는 JobID 및 CustomerID 열이 있습니다. 많은 다른 트리거와 프런트 엔드가이 열을 사용하며 완벽하게 작동합니다.
다음 쿼리는 올바르게 작동하고 "cust-000002"를 반환합니다. (이것은 위의 트리거를 트리거되지 않도록,이 jobitem에 대한 ItemCompleted = 0)
Set @customer = (select CustomerID FROM jobs WHERE JobID='ALC-20121119-001');
select @customer;
은 또한 다음과 같은 쿼리가 작동합니다
update jobitems set itemprice=itemprice/100 where JobID='ALC-20121119-001';
그래서, 나는 공식적으로 위의 정보와 함께 붙어있다. 도와주세요 :).
업데이트 :
변수를 제거하고으로 "@customer 교체"예상대로 트리거 걸쳐 동일한 오류를 줄 (작업 ID = old.JobID 잡 CustomerID를 선택).
또한 트리거를 수정하여 오류가 사라집니다. 변수를 단순히 새로운 방식으로 사용했는데 제대로 작동합니다. 다음은 각 작업에 대한 @customer의 출력을 테스트 열에 추가하여 완벽하게 작동합니다. 오류!
declare customer varchar(45);
Set @customer = (select CustomerID FROM jobs WHERE JobID=old.JobID);
If new.ItemCompleted<=>1
then
update jobs set [email protected] where JobID=old.JobID;
end if;
는 업데이트 :
그냥 내가 미친 아니라고 확인하기 위해, 나는 복사 다시 방아쇠를 붙여 넣어 그래서이 문제를 재현 할 것이다 이전과 동일한 오류 메시지가 표시됩니다. 또한 "ItemCompleted = 1"의 항목은 오류없이 업데이트 할 수 없으며 "ItemCompleted = 0"의 항목은 오류없이의 프런트 엔드를 통해 항목을 편집하려고 시도하는 중 하나씩 업데이트 할 수 있습니다. 나는 내가 지금 thouroughly 혼란 스럽기 때문에 내가 단지 확인할 것이다라고 상상했다.
완전히 수정되지 않은 복사 된 트리거 발사로 범인을 추적했습니다. 나는 로그가 옳은 방향으로 나를 가리키고 있다고 가정하고 있지만 로그를 통해 무엇을 말했는지를 알 수 없었기 때문에 이것을 읽으면서 바로 고쳤습니다. 그래서 나는 여러분이 정답을 상관없이 제공했다고 느낍니다. 추후 디버깅을위한 로그 도구를 제공해 주셔서 감사합니다. 내가 켜기 로그를 찾고 있었고 문제를 추적하기 전에 올바른 로그를 찾지 못했습니다! 나는 지금 로그를 켰고 아마 가까운 장래에 그것을 사용할 것입니다. 감사! – Damon