-
SQL CREATE와 ALTER 그리고 제약 조건back-end&DB/SQL(Oracle) 2023. 5. 10. 12:21728x90
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'back-end&DB > SQL(Oracle)' 카테고리의 다른 글
SQL TCL, DCL과 객체 (0) 2023.05.16 SQL DML와 서브쿼리 (0) 2023.05.15 SQL JOIN (0) 2023.05.09 SQL GROUP BY와 HAVING와 ORDER BY (0) 2023.05.08 SQL 함수 (0) 2023.05.04