Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

트리거를 사용하여 MySQL에서 삽입 또는 업데이트를 중지하시겠습니까?

<시간/>

MySQL에서 삽입 또는 업데이트를 중지하려면 SIGNAL SQL STATE 명령을 사용해야 합니다. 트리거 구문은 다음과 같습니다.

DELIMITER //CREATE TRIGGER yourTriggerName FOR INSERT ON yourTableName FOR 각 ROWBEGINyourCondition THENSIGNAL SQLSTATE '45000'SET MESSAGE_TEXT ='anyMessageToEndUser';END //DELIMITER;

이제 어떤 조건에서 테이블에 레코드를 삽입하는 것을 방지하는 트리거를 만듭니다. 트리거를 생성하는 쿼리는 다음과 같습니다.

mysql> DELIMITER //mysql> CREATE TRIGGER InsertPreventTrigger BEFORE INSERT ON Insert_Prevent -> FOR EACH ROW -> BEGIN -> IF(new.Id <1 or new.Id> 5) THEN -> SIGNAL SQLSTATE '45000' -> SET MESSAGE_TEXT ='레코드를 삽입할 수 없습니다'; -> END IF; -> END //쿼리 OK, 영향을 받는 행 0개(0.20초)mysql> DELIMITER;

위의 트리거는 0보다 작거나 5보다 큰 레코드를 삽입할 때마다 삽입을 중지합니다.

이제 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> Create table Insert_Prevent -> ( -> Id int -> );쿼리 OK, 영향을 받는 행 0개(0.62초)

이제 0보다 작거나 5보다 큰 레코드를 삽입합니다. 그러면 0보다 작거나 5보다 큰 레코드를 삽입할 때마다 삽입을 중지하도록 트리거가 생성되기 때문에 오류 메시지가 표시됩니다. 오류 메시지는 다음과 같습니다.

mysql> Insert_Prevent 값(0)에 삽입, 오류 1644(45000):레코드를 삽입할 수 없습니다. 

1과 5 사이에 레코드를 삽입하면 오류가 발생하지 않습니다. 위에서 논의한 것처럼 1에서 5 사이의 레코드를 삽입하도록 트리거가 생성되었기 때문에 레코드 삽입을 방지하지 않습니다. 레코드를 삽입하는 쿼리는 다음과 같습니다.

mysql> Insert_Prevent values에 삽입(1);Query OK, 영향을 받는 1행(0.20초)mysql> Insert_Prevent values에 삽입(5);Query OK, 영향 1행(0.17초)mysql> Insert_Prevent 값에 삽입( 2);쿼리 OK, 1행 영향(0.11초)mysql> Insert_Prevent 값에 삽입(3);Query OK, 1행 영향(0.23초)

select 문을 사용하여 테이블의 모든 레코드를 표시합니다. 쿼리는 다음과 같습니다.

mysql> Select *from Insert_Prevent;

다음은 출력입니다.

+------+| 아이디 |+------+| 1 || 5 || 2 || 3 |+------+4행 세트(0.00초)