일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 정수와유리수
- 중학수학
- 파이썬라이브러리
- numpy/pandas
- 정보처리기사실기
- 중학1-1
- CNN
- 데이터입출력구현
- 컴퓨터구조
- 혼공머신
- 정보처리기사필기
- pandas
- 자바
- CSS
- 연습문제
- html/css
- JSP/Servlet
- 코딩테스트
- C++
- 머신러닝
- 자바 실습
- 텍스트마이닝
- 파이썬
- 운영체제
- 데이터베이스
- 영어공부
- SQL
- 컴퓨터비전
- 딥러닝
- 데이터분석
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
테이블과 뷰 3 - 제약조건으로 테이블을 견고하게 2 : 기타 제약조건 본문
집에 와서 이어서 기타 제약조건 학습을 시작해 본다.
기타 제약조건
실무에서 데이터베이스를 운영하다 보면 필요한 여러 가지 제약 조건이 있다.
고유 키 제약조건
고유키 제약조건은 '중복되지 않는 유일한 값'을 입력해야 하는 조건이다. 이것은 기본 키 제약조건과 비슷하지만, 차이점은 고유 키 제약조건은 NULL 값을 허용한다는 것이다. NULL 값은 여러 개가 입력되어도 상관없다. 또 기본 키는 테이블에 1개만 설정해야 하지만, 고유 키는 여러 개를 설정해도 된다.
만약 회원 테이블에 Email 주소가 있다면 중복되지 않으므로 고유 키로 설정할 수 있다. SQL 코드로 확인해 보겠다.
이제 데이터를 입력해 보겠다.
세 번째 행은 입력되지 않은 것을 확인할 수 있다.
체크 제약조건
입력되는 데이터를 점검하는 기능을 한다. 예를 들어 평균 키에 마이너스 값이 입력되지 않도록 하거나, 연락처의 국번에 02, 064, 041 중 하나만 입력되도록 할 수 있다.
먼저 테이블을 정의하면서 CHECK 제약조건을 설정해 보자. 평균 키는 반드시 100 이상의 값만 입력되도록 설정했다. 열의 정의 뒤에 CHECK(조건)을 추가하면 된다.
데이터를 입력해 보겠다.
두 번째 행은 오류가 나는데 Check Constraint 오류는 체크 제약조건에서 설정한 값의 범위를 벗어났기 때문에 발생한다. 필요하다면 테이블을 만든 후에 ALTER TABLE 문으로 제약조건을 추가해도 된다. 연락처의 국번(phone1)에 02, 031, 032, 054, 055, 061 중 하나만 입력되도록 설정해 본다.
두 번째 행은 체크 제약조건에 위배되므로 오류가 발생한다.
기본값 정의
값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정해 놓는 방법이다. 예를 들어 키 를 입력하지 않고 기본적으로 160이라고 입력되도록 하고 싶다면 다음과 같이 정의할 수 있다.
이렇게 연락처의 국번을 입력하지 않으면 자동으로 02가 입력되도록 할 수 있다. 기본값이 설정된 열에 기본값을 default라고 써주고, 원하는 값을 입력하려면 해당 값을 써주면 된다.
기본값으로 160과 02가 출력되었다.
널 값 허용
널 값을 허용하려면 생략하거나 NULL을 사용하고, 허용하지 않으려면 NOT NULL을 사용한다. 다만 PRIMARY KEY가 설정된 열에는 NULL 값이 있을 수 없으므로 생략하면 자동으로 NOT NULL로 인식된다.
NULL 값은 '아무것도 없다'는 의미이다. 공백이나 0과는 다르다.
단원 마무리하기
2번만 틀렸는데, PRIMARY KEY로 설정하면 자동으로 NOT NULL이 되므로 생략해도 된다.
학습을 마치고
기타 제약조건을 공부하며 딴생각이 많이 나서 집중이 잘 되지 않아 평소 공부할 때보다 시간이 훨씬 더 많이 걸렸다. 그래도 저녁식사 전까지 다 마칠 수 있어서 정말 개운하다. 이 단원은 솔직히 많이 어려웠다. 제약 조건을 설정하는 건 지난번에 정처기 실기 공부를 할 때도 이해가 잘 되지 않았었다.
하지만 그때 공부한 것도 도움이 많이 되었다. CASCADE도 이미 들어보았고 조금은 쓸 줄 안다. 어제 정처기 실기시험이 얼마나 어렵던지 30분도 안 돼서 문제를 다 풀고는 나머지 30분은 그냥 시간을 때우며 보냈다.
1시간 안에는 퇴실할 수 없기 때문이다. 아마 점수는 10점이나 될 것 같았다. 그중에서 프로그래밍과 계산하는 문제가 절반 이상을 차지했고, 네트워크 문제도 4문제나 나왔다. 그러니까 내가 공부한 데서는 2문제밖에 나오지 않은 것이다. 그래도 SQL 문제는 아주 조금 푸는 시늉이라도 했다.
이렇게 매일 조금씩 공부하는 것이 나중에는 큰 성장이 있으리라 기대한다.
'알고리즘 및 자료 관리 > SQL' 카테고리의 다른 글
인덱스 1 - 인덱스의 개념을 파악하자 (0) | 2024.10.22 |
---|---|
테이블과 뷰 4 - 가상의 테이블 <뷰> (0) | 2024.10.22 |
테이블과 뷰 2 - 제약조건으로 테이블 견고하게 1 : 기본 키 제약조건 및 외래 키 제약조건 (0) | 2024.10.21 |
테이블과 뷰 1 - 테이블 만들기 (0) | 2024.10.21 |
SQL 고급 문법 6 - SQL 프로그래밍 2 : WHILE 문과 동적 SQL (0) | 2024.10.21 |