back-end&DB/SQL(Oracle)

SQL CREATE와 ALTER 그리고 제약 조건

Hoon0211 2023. 5. 10. 12:21
728x90

1. DDL

 

- DDL : data definition language 데이터 정의어
- CREATE : 새로운 객체를 생성할 때 사용하는 명령어
- CREATE TABLE, USER, VIEW, SEQUENCE,TABLE

 

- 기존의 EMPLOYEES 테이블을 한글 버전으로 생성
- 테이블 정보 조회 : 테이블명 작성 -> 드래그 쉬프트 F4

- 실행화면

 

 

CREATE TABLE 테이블 생성

CREATE USER 계정 생성

CREATE SEQUENCE 시퀀스 생성

CREATE VIEW 뷰 생성

 

1.1 테이블 생성

CREATE TABLE 테이블명(
컬럼명 자료형(크기) [기본값] [NULL여부],
-- []는 선택 사항 기본값은 둘 다 NULL
...
컬럼명 자료형(크기) [기본값] [NULL여부]
);
CREATE TABLE 직원(
 -- 컬럼명 자료형(크기) 기본값 NULL 여부
 직원ID NUMBER(6) NOT NULL,
 이름 VARCHAR2(20),
 성 VARCHAR2(25) NOT NULL,
 이메일 VARCHAR2(25) NOT NULL,
 핸드폰 VARCHAR2(20),
 입사일 DATE NOT NULL,
 직업ID VARCHAR2(10) NOT NULL,
 급여 NUMBER(8,2),
 커미션비율 NUMBER(2,2),
 매니저ID NUMBER(6),
 부서ID NUMBER(4)
);

출력 : Table 직원이(가) 생성되었습니다.

 

1.1.1 테이블 생성 규칙

- 대소문자는 구분하지 않는다.

- 테이블명은 중복될 수  없다.

- 같은 테이블 내에서 컬럼명은 중복될 수 없다.

- 문자로 시작해야하며, 예약어는 사용 불가능하다.

 

1.1.2 실습

- 부서테이블을 한글VER 만들기

CREATE TABLE 부서(
부서ID NUMBER(4) not null,
부서명 VARCHAR2(30) not null,
매니저ID NUMBER(6),
지역ID NUMBER(4)
);

 

2. 제약 조건 

 

- ★★★ PRIMARY KEY(PK)

- UNIQUE  KEY(UK)

- NOT NULL

- CHECK

- ★★★ FOREIGN KEY(FK)

 

2.1 PRIMARY KEY(PK)

-식별자를 물리적 모델링 한것

-NOT NULL + UNIQUE = NULL 불가 + 중복 불가

- ★ 식별자 : 테이블에서 행을 식별할 수 있는 칼럼

- ex) 사원 ID

 

2.2 UNIQUE  KEY(UK)

- PRIMARY KEY와 다르게 NULL 값 입력 가능

- ★ 중복은 불가능

- ex) 이메일 등등

 

2.3 NOT NULL

- NULL값 불가능

 

2.4 CHECK

- 지정한 데이터만 입력 가능

- ex) 성별 등등

 

2.5 FOREIGN KEY(FK)

왜래키, 테이블끼리 연결되어 있는 관계를 물리적 모델링한 것

다른 테이블의 기본키를 참조하는 속성의 값

- ★ FOREIGN KEY 사용하면 데이터 무결성

ex) 직원은 부서에 소속될 수 있으며, 부서는 직원을 소속할 수 있다.

 

2.6. 무결성 제약조건

- 무결성 데이터에 결함이 없는 상태

- 즉, 데이터가 정확하고 유효하게 유지 된 상태

 

2.6.1 무결성 제약 조건

- 데이터베이스에 저장된 데이터의 무결성을 보장, 일관되게 유지하기 위함

 

- 개체 무결성 제약조건 : 기본키를 구성하는 속성은 NULL 값을 가질 수 없음

- 참조 무결성 제약조건 : 외래키는 참조할 수 없는 값을 지닐 수 없음

 

2.7 PK, UK, CHECK 문법

ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건(컬럼)

(테이블 변경)                  (제약조건 추가)                          (제약조건)

--PK 지정
ALTER TABLE 직원 ADD CONSTRAINT 직원_직원ID_PK PRIMARY KEY(직원ID);

--UK 지정
ALTER TABLE 직원 ADD CONSTRAINT 직원_이메일_UK UNIQUE(이메일);

--CHECK 지정(급여)
ALTER TABLE 직원 ADD CONSTRAINT 직원_급여_CK CHECK(급여 > 0);

 

2.8 FK 추가

- ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건(칼럼) REFERENCES 참조할 테이블(참조할 컬럼)
- FK는 UK이거나 PK일 때 참조가능! 따라서 부서테이블의 부서ID를 PK로 먼저 제약조건을 걸고 난 후에 직원테이블에서 가능

ALTER TABLE 부서 ADD CONSTRAINT 부서_부서ID_PK PRIMARY KEY(부서ID);
ALTER TABLE 직원 ADD CONSTRAINT 직원_부서ID_FK FOREIGN KEY(부서ID) REFERENCES 부서(부서ID);

 

2.9 기타(NOT NULL, 제약 조건 삭제, 제약 조건 조회)

--NOT NULL
ALTER TABLE 직원 MODIFY 이름 NOT NULL;

--제약 조건 삭제
ALTER TABLE 직원 DROP CONSTRAINT 직원_급여_CK;

-- 제약 조건 조회
SELECT * FROM USER_CONSTRAINTS
WHERE TABLE_NAME ='직원';

 

3. 실습

CREATE TABLE 제약조건테스트(
PK테스트 NUMBER PRIMARY KEY,
UK테스트 NUMBER UNIQUE,
NN테스트 NUMBER NOT NULL,
CK테스트 NUMBER CHECK(CK테스트 > 0)
);
CREATE TABLE 제약조건테스트2(
PK테스트 NUMBER,
UK테스트 NUMBER,
CK테스트 NUMBER,
부서ID NUMBER(4),
-- 제약 조건으 추가
CONSTRAINT 테스트2_PK테스트_PK PRIMARY KEY(PK테스트),
CONSTRAINT 테스트2_UK테스트_PK UNIQUE(UK테스트),
CONSTRAINT 테스트2_CK테스트_CK CHECK(CK테스트>0),
CONSTRAINT 테스트2_부서ID_FK FOREIGN KEY(부서ID) REFERENCES 부서(부서ID)
);

 

3.1 문제 

테이블명 : 네이버회원
컬럼/자료형 
ID –> 가변형문자 15BYTE
이름 -> 가변형문자 12 BYTE, NULL 불가
비밀번호 -> 가변형문자 16BYTE
생년월일 -> 날짜형
성별 -> 가변형문자 3BYTE

테이블명 : 네이버블로그
컬럼/자료형 
블로그번호 –> NUMBER
블로그제목 -> 가변형문자 100BYTE, NULL불가
블로그내용 -> 가변형문자 4000BYTE
ID -> 가변형문자 15BYTE
CREATE TABLE 네이버회원(
 회원ID VARCHAR2(15),
 이름 VARCHAR2(12) not null,
 비밀번호 VARCHAR2(16),
 생년월일 DATE,
 성별 VARCHAR2(3),
 CONSTRAINT 회원_ID_PK PRIMARY KEY(회원ID),
 CONSTRAINT 회원_성별_CK CHECK(성별 = '남' or 성별 = '녀')
 );

CREATE TABLE 네이버블로그(
 블로그번호 NUMBER,
 블로그제목 VARCHAR2(100) NOT NULL,
 블로그내용 VARCHAR2(4000),
 회원ID VARCHAR2(15),
 CONSTRAINT 블로그_번호_PK PRIMARY KEY(블로그번호),
 CONSTRAINT 블로그_회원ID_FK FOREIGN KEY(회원ID) REFERENCES 네이버회원(회원ID) 
 );

 

4. ALTER

-- 컬럼 추가
ALTER TABLE 네이버회원 ADD 나이 NUMBER(3);

-- 컬럼 삭제
ALTER TABLE 네이버회원 DROP COLUMN 나이;

-- 컬럼 속성 변경
ALTER TABLE 네이버회원 MODIFY 회원ID VARCHAR2(30);

--컬럼 속성 변경
ALTER TABLE 네이버회원 RENAME COLUMN A to B;

 

5. DROP

- DROP TABLE 테이블 삭제
- 테이블에 UK,PK가 다른 테이블에 참조가 되고 있는 경우 DROP TABLE로 삭제가 불가능
- 참조 되어 있을 때 삭제하려면 CASCADE CONSTRAINT 옵션 추가

DROP TABLE 네이버블로그;
DROP TABLE 네이버회원;

DROP TABLE 네이버회원 CASCADE CONSTRAINT;

 

5.1  DELETE, TUNCATE DROP 차이점

SELECT * FROM 성적표;
DELETE FROM 성적표; -- 데이터를 삭제, 다만 COMMIT전 까지 가능 하다.
ROLLBACK; -- 복구
-- 데이터를 영구적으로 삭제, 복구 불가능!
TURNCATE TABLE 성적표;
-- table 성적표가 잘렸습니다.
-- 테이블을 영구적으로 삭제, 복구 불가능하다.
DROP TABLE 성적표;
728x90
댓글수0