반응형
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
반응형
'programing' 카테고리의 다른 글
해시맵 키의 이름을 변경할 수 있습니까? (0) | 2022.09.25 |
---|---|
MySQL에서 열 이름 바꾸기 (0) | 2022.09.25 |
Larabel에서 POST의 모든 정보를 얻는 방법 (0) | 2022.09.25 |
MariaDB 설치: 설치 중에 서비스로 실행 중 선택을 취소했습니다.mariadb를 시작하고 멈추는 올바른 방법은 무엇입니까? (0) | 2022.09.25 |
MySQLDB가 실행하는 실제 쿼리를 인쇄하시겠습니까? (0) | 2022.09.25 |