<제약조건의 추가 및 수정>

 

  • 클래스 테이블 생성

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

 

 

 


 

  • 학생 테이블에 기본키를 추가

1
2
ALTER TABLE student
ADD CONSTRAINT student_sno_pk PRIMARY KEY(sno);
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

+ Recent posts