개발자

mysql에서 값을 제한할 수 있나요

2023년 09월 18일조회 69

CREATE TABLE uesr_into( id SMALLINT AUTO_INCREMENT PRIMARY KEY, name MEDIUMTEXT NOT NULL, sex ENUM('M' ,'F') NOT NULL, job MEDIUMTEXT age MEDIUMINT NOT NULL if(age>20 AND age<100, NOT NULL, '입소가 불가능 합니다.') ); if문에서 값을 못게 할 수 없나요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

김도열님의 프로필 사진

컬럼에 저장하는 값을 제한할 때는 CHECK Constraint를 선언해 줍니다.

1CREATE TABLE uesr_into (
2    id  SMALLINT AUTO_INCREMENT PRIMARY KEY,
3    name MEDIUMTEXT NOT NULL,
4    sex ENUM('M' ,'F') NOT NULL,
5    job MEDIUMTEXT,
6    age MEDIUMINT NOT NULL,
7    CONSTRAINT ck_age CHECK (age > 20 AND age < 100)
8);

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2023년 09월 18일

MySQL에서는 기본적으로 if문을 사용해 CREATE TABLE 문에서 각 열의 값을 제한하는 것은 불가능합니다. 그러나, table 생성 후 TRIGGER를 이용하여 INSERT 혹은 UPDATE 시에 조건을 검사할 수 있습니다. 예를 들어 다음과 같이 트리거를 만들어 나이(age)가 20보다 작거나 100보다 큰 경우 insert를 허용하지 않도록 할 수 있습니다. ```mysql CREATE TRIGGER check_age BEFORE INSERT ON user_info FOR EACH ROW IF NEW.age < 20 OR NEW.age > 100 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '입소가 불가능 합니다.'; END IF; ``` 위의 트리거는 새로운 row 추가(insert)에 대해 동작하며, age값이 지정된 범위 밖인 경우 에러 메시지와 함께 insert 동작을 중단시킵니다. 단, 이렇게 제한된 동작을 수행하려면 MySQL 버전이 5.5 이상이어야 합니다. TRIGGER는 데이터베이스에서 데이터의 CRUD(Create, Read, Update, Delete) 동작 전/후에 원하는 작업을 자동으로 수행할 수 있게 해주는 기능입니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!