복붙노트

[SQL] 특정 조건에서 방지 INSERT에 MySQL의 트리거

SQL

특정 조건에서 방지 INSERT에 MySQL의 트리거

나는 생일 (열 중 하나)은 미래에있는 경우 삽입을 방지하는 트리거를 만들고 싶어. 내가 이거 가지고있어:

CREATE TRIGGER foo
BEFORE INSERT ON table
FOR EACH ROW
BEGIN
  IF NEW.birthdate > CURRENT_DATE()
  THEN
    //How do I prevent the insert right here???
  END IF;
END;

어떻게 if 문 내부에 삽입을 취소 할 수 있습니다?

해결법

  1. ==============================

    1.그것은 그런 식으로 할 수 있다면이를 바탕으로 나는 확실하지 않다.

    그것은 그런 식으로 할 수 있다면이를 바탕으로 나는 확실하지 않다.

  2. ==============================

    2.당신은 트리거는 비어 있습니다보고 삽입을 방지하기 위해 신호를 제기 빈 문자열을 삽입.

    당신은 트리거는 비어 있습니다보고 삽입을 방지하기 위해 신호를 제기 빈 문자열을 삽입.

    삽입이 방지되도록 당신은 빈 문자열이 공백이고 null로 값을 변경 트리거 톱을 삽입.

  3. ==============================

    3.늦은 시간에이다하지만 지금은 그렇게 할 수 있을지 모르겠어요 :

    늦은 시간에이다하지만 지금은 그렇게 할 수 있을지 모르겠어요 :

    SIGNAL SQLSTATE '45000' 
    SET MESSAGE_TEXT = "your error text";
    

    추신 이전과 트리거 이후 구분 기호를 수정하는 것을 잊지 마세요 ...

  4. ==============================

    4.

    DELIMITER $$
    CREATE TRIGGER foo
    BEFORE INSERT ON table
    FOR EACH ROW
    BEGIN
      IF NEW.birthdate > CURRENT_DATE()
      THEN
       SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Warning: birthdate can not be greater than current date!';
      END IF;
    
    END$$
        DELIMITER ;
    
  5. ==============================

    5.저도 같은 문제가 있었다. 나는 테이블을 만들었지 만의 MySQL에서 문자열의 최소 길이를 할당 할 수있는 방법이 없었다. 다음과 같이 나는 테이블을 생성 :

    저도 같은 문제가 있었다. 나는 테이블을 만들었지 만의 MySQL에서 문자열의 최소 길이를 할당 할 수있는 방법이 없었다. 다음과 같이 나는 테이블을 생성 :

    CREATE TABLE Users
               (
                 UserName varchar(15) NOT NULL PRIMARY KEY,
                 Password varchar(15) NOT NULL,
                 Active Bool DEFAULT TRUE,
                 CHECK (CHAR_LENGTH(UserName)>3)
               )
    

    그러나 CHECK 기능이 삽입 작동하지 않습니다.

    그래서 다음과 같이 내 테이블을 변경 :

    CREATE TABLE Users
               (
                 UserName varchar(15) NOT NULL PRIMARY KEY,
                 Password varchar(15) NOT NULL,
                 Active Bool DEFAULT TRUE
               )
    

    그 후, 트리거를 만들 :

    delimiter $$
    CREATE TRIGGER myTrigger
       BEFORE INSERT ON Users
       FOR EACH ROW
     BEGIN
       IF CHAR_LENGTH(NEW.UserName) < 4 THEN
         DELETE FROM Users WHERE Users.UserName=NEW.UserName;
       END if;
     END$$
    delimiter ;
    
  6. ==============================

    6.CHECK 제한에 대한 완벽한 후보와 같은 질문의 소리에서 설명하는 문제가 - 테이블 정의에 다음 행을 추가합니다.

    CHECK 제한에 대한 완벽한 후보와 같은 질문의 소리에서 설명하는 문제가 - 테이블 정의에 다음 행을 추가합니다.

    제약 born_in_the_past 검사 (생년월일 <= 지금 ())

  7. from https://stackoverflow.com/questions/2981930/mysql-trigger-to-prevent-insert-under-certain-conditions by cc-by-sa and MIT license