Back-End/DBMS(Oracle)

[Oracle] SQL문 테이블 생성, 제약조건 추가

챌링킴 2021. 4. 18. 20:11
반응형

1) Script 생성

1. 스크립트 우클릭 후 Ctrl+] 클릭하여 새로운 SQL 에디터 생성

2. 최상단 Oracle-XE, WEB 연결상태 확인

 

2) 테이블 생성

--한줄 주석
/*
	여러줄
	주석
*/
--테이블 생성
CREATE TABLE TEST( --TEST 는 테이블명
	INTDATA NUMBER(4),
	STRDATA VARCHAR2(100)
);

3) 테이블 삭제

--테이블 삭제
DROP TABLE TEST;

4) 테이블 수정

--컬럼추가
ALTER TABLE TEST ADD(
	DOUBLEDATA NUMBER(6,2) --추가할컬럼명 자료형
);

--컬럼수정
ALTER TABLE TEST MODIFY(
	STRDATA VARCHAR2(300) --바꿀컬럼명 자료형
);

--테이블 이름변경
ALTER TABLE TEST RENAME TO TEST2;
ALTER TABLE TEST2 RENAME TO TEST;

--컬럼 이름변경
ALTER TABLE TEST RENAME COLUMN DOUBLEDATA TO DOBDATA;

--컬럼삭제
ALTER TABLE TEST DROP COLUMN DOBDATA;

5) PK,FK 부여하기

1. PRIMARY KEY

- NOT NULL과 UNIQUE 조건을 모두 만족함

- 한 테이블 내에 반드시 한 개의 KEY만 존재해야하며, 여러 행들과의 구분을 위해 있는 것이 좋음

- PK를 설정한 컬럼은 값이 반드시 존재해야하며 유일해야 함

 

 

2. FOREIGN KEY

- 다른 테이블에서 가져온 값을 추가해야 하는 경우에는 외래키로 설정을 해준다.

값 추가하는 경우 OR 테이블 생성
   부모 먼저 그 다음 자식

값 삭제하는 경우 OR 테이블 삭제
   자식 먼저 그 다음 부모

--아래처럼 하면 PK의 이름이 임의로 부여됨
CREATE TABLE "USER"(
	ID VARCHAR2(100) PRIMARY KEY,
	PW VARCHAR2(100),
	NAME VARCHAR2(100)
);

--PK이름 부여하면서 주는 방법
CREATE TABLE "USER"(
	ID VARCHAR2(100),
	PW VARCHAR2(100),
	NAME VARCHAR2(100),
	CONSTRAINT USER_PK PRIMARY KEY(ID)
    --우리가 원하는 이름(USER_PK)으로 ID에 PK가 부여됨
);

--FK 부여하기
CREATE TABLE PRODUCT(
	NUM NUMBER(7),
	NAME VARCHAR2(100),
	INFO VARCHAR2(2999),
	ID VARCHAR2(100),
	CONSTRAINT PRODUCT_USER_FK FOREIGN KEY(ID) REFERENCES "USER"(ID)
);

6) 제약조건 추가

1. UNIQUE

- 중복 데이터를 허용하지 않음 but, NULL의 중복은 방지하지 못함

 

2. NOT NULL

- 해당 컬럼 NULL값을 허용하지 않음

- 중복은 허용되지만 반드시 데이터가 있어야함

 

3. CHECK

- 해당 컬럼에 정해진 데이터 조건을 지정하여 그 특정 범위 내의 데이터만 입력

CHECK(컬럼명 IN (데이터1, 데이터2 , ...))
CHECK(조건식)

 

7) 실습으로 통한 제약조건 알아보기

--제약조건 추가
/*
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 PRIMARY KEY(컬럼);
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 FOREIGN KEY(컬럼) REFERENCES 참조테이블(참조컬럼)
ALTER TABLE 테이블명 MODIFY 컬럼명 CONTRAINT 제약조건명 NOT NULL;
*/

---수강신청 프로그램
CREATE TABLE STUDENT(
	STUDNUM VARCHAR2(10),
	IDNUM VARCHAR2(100) UNIQUE,
	STUDNAME VARCHAR2(100) NOT NULL,
	STUDCLASS VARCHAR2(100),
	GENDER CHAR(1) CHECK(GENDER IN ('M','W')),
	STUDGRADE NUMBER(1),
	CONSTRAINT STUDENT_PK PRIMARY KEY(STUDNUM) --중복되지않는 고유한 값
);

CREATE TABLE SUBLIST(
	LISTNUM VARCHAR2(100),
	STUDNUM VARCHAR2(10),
	SUBCODE VARCHAR2(100),
	CONSTRAINT SUBLIST_PK PRIMARY KEY(LISTNUM),
	CONSTRAINT SUBLIST_STUDENT_FK FOREIGN KEY(STUDNUM) REFERENCES STUDENT(STUDNUM),
	CONSTRAINT SUBLIST_SUBJECT_FK FOREIGN KEY(SUBCODE) REFERENCES SUBJECT(SUBCODE)
);

 

반응형