<제약조건의 추가 및 수정>
-
클래스 테이블 생성
1
2
3
4
|
CREATE TABLE class (
cno VARCHAR2(2),
cname VARCHAR2(50)
);
|
cs |
-
테이블에 새 행을 입력
1
2
3
|
INSERT INTO class VALUES ('01','데이터베이스');
INSERT INTO class VALUES ('02','자바');
SELECT * FROM class;
|
cs |
-
학생 테이블 생성
1
2
3
4
5
|
CREATE TABLE student(
sno VARCHAR2(4),
sname VARCHAR2(50),
cno VARCHAR(2)
);
|
cs |
-
학생 테이블에 새 행을 입력
1
2
3
4
5
|
INSERT INTO student VALUES ('0414','홍길동','01');
INSERT INTO student VALUES ('0415','임꺽정','02');
INSERT INTO student VALUES ('0416','이순신','03');
commit; --영구 저장
SELECT * FROM student;
|
cs |
-
클래스 테이블에 기본키 추가
1
2
|
ALTER TABLE class
ADD CONSTRAINT class_cno_pk PRIMARY KEY(cno);
|
cs |
-
기본키는 널값이나 중복될 수 없음
1
|
INSERT INTO class VALUES (NULL,'데이터베이스');
|
cs |
-
클래스 테이블에 유니크 키를 추가
1
2
|
ALTER TABLE class
ADD CONSTRAINT class_cname_uk UNIQUE(cname);
|
cs |
-
유니크키는 중복안됨
1
|
INSERT INTO class VALUES ('03', '데이터베이스');
|
cs |
-
제약 조건을 조회하는 명령문
1
2
3
|
SELECT *
FROM ALL_CONSTRAINTS --모든 제약조건
WHERE table_name = 'CLASS'; --테이블명 입력시 대문자
|
cs |
-
학생 테이블에 기본키를 추가
-
학생 테이블의 sname에 NOT NULL 추가 (NOT NULL 일경우 MODIFY 사용)
1
2
|
ALTER TABLE student
MODIFY sname CONSTRAINT student_sname_nn NOT NULL;
|
cs |
-
학생 테이블에 외래키 추가
1
2
3
4
5
|
ALTER TABLE student
ADD CONSTRAINT student_cno_fk FOREIGN KEY(cno)
REFERENCES class(cno); --클래스 테이블에 cno열을 참조
--03이 참조하는 데이터에 없기 때문에 에러발생
|
cs |
+ 학생 테이블에 외래키 추가가 안되는 이유는? 03이 참조하는 데이터에 없기 때문.
(0416 이순신 03 행에서 03을 01로 바꾼다.)
1
2
3
4
|
--제약조건을 추가할 때 이미 만들어진 테이블에 각 행의 데이터가
만족해야 제약조건이 추가된다. UPDATE student SET cno = '01'
WHERE sno='0416';
|
cs |
+ 그 다음 외래키를 추가하면 테이블 변경이 된다.
1
2
3
|
ALTER TABLE student
ADD CONSTRAINT student_cno_fk FOREIGN KEY(cno)
REFERENCES class(cno);
|
cs |
'Learning > SQL' 카테고리의 다른 글
테이블 컬럼(열)의 추가/수정/삭제 (0) | 2020.06.22 |
---|---|
제약조건의 삭제 (0) | 2020.06.22 |
제약조건 (constraints) (0) | 2020.06.19 |
테이블 만들고 삭제하기 (0) | 2020.06.19 |
오라클 SQL의 데이터타입 (0) | 2020.06.19 |