0
직원 삭제를 방지하는 트리거를 만들어야합니다. trigger documentation에서MySQL - 연결된 테이블을 통한 삭제를 방지하는 트리거
직원 삭제를 방지하는 트리거를 만들어야합니다. trigger documentation에서MySQL - 연결된 테이블을 통한 삭제를 방지하는 트리거
:
트리거는 명시 적 또는 암시 적으로 시작 또는 START의 트랜잭션으로 트랜잭션을 종료, COMMIT 또는 ROLLBACK 문을 사용할 수 없습니다.
대개 이렇게 불가능합니다. 당신이 할 수있는 일은 전체 거래가 실패 할 때 트리거에서 오류를 강제로내는 것입니다.
CREATE TRIGGER t1 BEFORE DELETE ON table1
FOR EACH ROW
BEGIN
IF (failCondition) THEN
SELECT 1/0 FROM table1 LIMIT 1
END IF;
END
이 오류를 트리거 전체 트랜잭션을 롤백 할
편집 :
그래서 문제에 대한 문제는이
CREATE TRIGGER preventLastStaffDeletion BEFORE DELETE ON Admission
FOR EACH ROW
BEGIN
DECLARE remaining INT DEFAULT 0;
SET remaining := (SELECT COUNT(staff) FROM Admission WHERE the_date = OLD.the_date AND work_time = OLD.work_time);
IF remaining = 1 THEN
SELECT 1/0 FROM Admission LIMIT 1
END IF;
END
하지나요 테스트 같은 것 문법 오류는 변명의 여지가 있지만 아이디어는 분명해야합니다. 단 하나의 왼쪽이 때까지
이 날짜에이 작업 시간을 가진 직원의 삭제를 할 수 있습니다
편집 2 다시 읽어
당신이 수행하는 방법에 정교한 조건 실패 질문을 업데이트 실패 조건? DISTINCT를 사용하여 시도했지만 그것은 나를시키지 않습니다. –
구체적인 예가 추가되었습니다 –
LIMIT 1 전에 table1이 있는데 무엇을 의미합니까? –