programing

check 절에서 CURDATE()를 사용하는 방법

copysource 2022. 9. 25. 14:47
반응형

check 절에서 CURDATE()를 사용하는 방법

'dateFrom' 및 'dateTo' 필드가 오늘 날짜보다 커야 하는 테이블을 만들려고 합니다.그래서 CHECK을 이렇게 썼어요.

CREATE TABLE Booking (
       hotelNo int(10),
       guestNo int(10),
       dateFrom datetime,
       dateTo datetime,
       roomNo int(10),
       CHECK (dateFrom >= CURDATE() AND dateTo >= CURDATE())
);

근데 계속 에러가 나요.

  ERROR 1901 (HY000): Function or expression 'curdate()' cannot be used in the CHECK clause of `CONSTRAINT_1`

구글에서 여러 번 검색해 봤지만 방법을 찾을 수가 없었어요.

MySQL 문서에서는

리터럴, 결정론적 내장 함수 및 연산자가 허용됩니다.테이블 내의 동일한 데이터가 주어진 경우 여러 호출이 연결된 사용자와 독립적으로 동일한 결과를 생성하는 경우 함수는 결정론적입니다.이 정의에 실패한 비확정 함수의 예: CONNECTION_ID(), CURRENT_USER(), NOW().

https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html

그래서 대신 이런 방아쇠를 사용했는데

CREATE TRIGGER date_check
BEFORE INSERT ON Booking
FOR EACH ROW
BEGIN
IF NEW.dateFrom <= CURDATE() OR NEW.dateTo <= CURDATE() THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid date!';
END IF;
END

언급URL : https://stackoverflow.com/questions/55204218/how-to-use-curdate-in-check-clause

반응형