SQL
SQL6 DDL(Data Definition Language)
#풀닢
2023. 1. 17. 17:25
DDL이란 | 데이터 정의 언어이다. 객체(Object)를 만들고(CREATE), 수정하고(ALTER),삭제(DROP)하는 구문 |
오라클 객체의 종류 | 테이블(TABLE),뷰(VIEW),시퀀스(SEQUENCE),인덱스(INDEX),패키지(PACKAGE), 프로시져(PROCEDUAL),함수(FUNCTION),트리거(TRIGGER),동의어(SYNONYM), 사용자(USER) |
CREATE – 테이블만들기 | [ 표현식 ] CREATE TABLE 테이블명 ( 컬럼명 자료형(크기) , 컬럼명 자료형(크기).. ); |
CREATE TABLE MEMBER(
MEMBER_ID VARCHAR2(20),
MEMBER_PWD VARCHAR2(20),
MEMBER_NAME VARCHAR2(20)
);
컬럼 주석 | [ 표현식 ] COMMENT ON CULUMN 테이블명.컬럼명 IS ‘주석내용’; |
COMMENT ON COLUMN MEMBER.MEMBER_ID IS ‘회원아이디’;
COMMENT ON COLUMN MEMBER.MEMBER_PWD IS ‘비밀번호’;
COMMENT ON COLUMN MEMBER.MEMBER_NAME IS ‘회원이름’;
제약 조건(CONSTRAINTS) | 테이블 작성 시 각 컬럼에 대한 기록에 대해 제약조건을 설정할 수 있다. 데이터 무결성 보장이 주 목적 입력 데이터에 문제가 없는지 검사와 데이터의 수정/삭제 가능 여부 검사 등에 사용 |
NOT NULL | 데이터에 NULL을 허용하지 않는다. |
UNIQUE | 중복된 값을 허용하지 않는다. |
PRIMARY KEY | ULL을 허용하지 않고, 중복 값을 허용하지 않는다. 컬럼의 고유 식별자로 사용하기 위함 |
FOREIGN KEY | 참조되는 테이블의 컬럼의 값이 존재하면 허용 |
CHECK | 저장 가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만 허용 |
NOT NULL | 해당 컬럼에 반드시 값이 기록되어야 하는 경우, 특정 컬럼에 값을 저장하거나 수정할 때 NULL값을 허용하지 않도록 컬럼 레벨에서 제한 |
NOT NULL 제약조건이 설정된 컬럼에 NULL값이 입력되면, 행 자체를 삽입하지 않는다.
CREATE TABLE
USER_NOCONS(
USER_NO NUMBER,
USER_ID VARCHAR2(20),
USER_PWD VARCHAR2(30),
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50)
);
UNIQUE | 컬럼에 입력 값에 대해 중복을 제한하는 제약조건이다. 컬럼레벨과 테이블레벨에 설정 가능 함 |
USER_NOCONS 테이블 생성
CREATE TABLE USER_NOCONS(
USER_NO NUMBER,
USER_ID VARCHAR2(20),
USER_PWD VARCHAR2(30),
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50)
);
1행 삽입
INSERT
INTO USER_NOCONS
VALUES
(
1
, ’user01’
, ‘pass01’
, ‘홍길동’
, ‘남’
, ‘010-1234-5678’
, ‘hong123@greedy.com’
);
/ UNIQUE 제약조건이 없는 컬럼은 중복된 값도 저장을 허용
CREATE TABLE USER_UNIQUE(
USER_NO NUMBER,
USER_ID VARCHAR2(20) UNIQUE, --컬럼레벨
USER_PWD VARCHAR2(30),
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50)
);
INSERT
INTO USER_UNIQUE
VALUES
(
1
, ’user01’
, ‘pass01’
, ‘홍길동’
, ‘남’
, ‘010-1234-5678’
, ‘hong123@greedy.com’
);
오류
PRIMARY KEY | 테이블에서 한 행의 정보를 구분하기 위한 고유 식별자(IDENTIFIER)역할을 한다. NOT NULL의 의미와 UNIQUE의 의미를 둘 다 가지고 있으며, 한 테이블 당 한 개만 설정 할 수 있음. 컬럼 레벨과 테이블 레벨에서 둘 다 지정 가능 |
CREATE TABLE USER_PRIMARYKEY(
USER_NO NUMBER PRIMARY KEY,
USER_ID VARCHAR2(20) UNIQUE,
USER_PWD VARCHAR2(30) NOT NULL,
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50)
);
CREATE TABLE USER_PRIMARYKEY(
USER_NO NUMBER,
USER_ID VARCHAR2(20) UNIQUE,
USER_PWD VARCHAR2(30) NOT NULL,
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50),
PRIMARY KEY(USER_NO)
);
FOREIGN KEY | 참조 무결성을 유지하기 위한 제약조건 즉 참조된 다른 테이블이 제공하는 값만 사용할 수 있도록 제한을 거는 것 참조되는 컬럼과 참조된 컬럼을 통해 테이블간의 관계가 형성된다. 또한, 참조되는 값은 제공되는 값 이외에 NULL을 사용 가능하며, 참조할 테이블의 참조할 컬럼명을 생략할 경우에는 PRIMARY KEY로 설정된 컬럼이 자동으로 참조할 컬럼이 된다. |
FOREIGN KEY 제약조건 | USER_GRADE TABLE의 GRADE_CODE 컬럼을 참조 함 USER_GRADE 테이블을 USER_FOREIGNKEY 테이블에서 참조하는 관계이기 때문에 USER_GRADE 테이블의 데이터 삭제 시 참조무결성에 위배되기 때문에 삭제가 불가능 |
1) 테이블레벨
CREATE TABLE USER_FOREIGNKEY(
USER_NO NUMBER PRIMARY KEY,
USER_ID VARCHAR2(20) UNIQUE,
USER_PWD VARCHAR2(30) NOT NULL,
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50),
GRADE_CODE NUMBER,
FOREIGN KEY(GRADE_CODE) REFERENCES USER_GRADE(GRADE_CODE)
);
2) 컬럼레벨
CREATE TABLE USER_FOREIGNKEY(
USER_NO NUMBER PRIMARY KEY,
USER_ID VARCHAR2(20) UNIQUE,
USER_PWD VARCHAR2(30) NOT NULL,
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50),
GRADE_CODE NUMBER CONSTRAINT FK_USER_NO REFERENCESUSER_GRADE(GRADE_CODE)
);
-결과
INSERT
INTO USER_FOREIGNKEY
VALUES
(
1
, ‘user01’
, ‘pass01’
, ‘홍길동’
, ‘남’
, ‘010-1234-5678’
, ‘hong123@greedy.com’
, 10
);
삭제 옵션 | 부모 테이블의 데이터 삭제 시 자식 테이블의 데이터를 어떠한 방식으로 처리할 지에 대한 내용을 제약조건 설정 시 옵션으로 지정할 수 있음 기본 삭제 옵션은 ON DELETE RESTRICTED로 지정되어 있음 |
CREATE TABLE USER_FOREIGNKEY(
USER_NO NUMBER PRIMARY KEY,
USER_ID VARCHAR2(20) UNIQUE,
USER_PWD VARCHAR2(30) NOT NULL,
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50),
GRADE_CODE NUMBER REFERENCES USER_GRADE(GRADE_CODE) ON DELETE SET NULL
);
DELETE
FROM USER_GRADE
WHERE GRADE_CODE = 10;
부모 테이블의 데이터 삭제 시 참조하고 있는 테이블의 컬럼 값이 NULL로 변경 됨
CREATE TABLE USER_FOREIGNKEY(
USER_NO NUMBER PRIMARY KEY,
USER_ID VARCHAR2(20) UNIQUE,
USER_PWD VARCHAR2(30) NOT NULL,
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50),
GRADE_CODE NUMBER REFERENCES USER_GRADE(GRADE_CODE) ON DELETE CASCADE
);
DELETE
FROM USER_GRADE
WHERE GRADE_CODE = 10;
부모 테이블의 데이터 삭제 시 참조하고 있는 테이블의 컬럼 값이 존재하던 행 전체를 삭제 함
CHECK | 해당 컬럼에 입력되거나 수정되는 값을 체크하여, 설정된 값 이외의 값이면 에러를 발생시킨다. 비교연산자를 이용하여 조건을 설정하며, 비교값은 리터럴만 사용 가능하고 변하는 값이나 함수 사용이 불가능 |
CREATE TABLE USER_CHECK(
USER_NO NUMBER PRIMARY KEY,
USER_ID VARCHAR2(20) UNIQUE,
USER_PWD VARCHAR2(30) NOT NULL,
USER_NAME VARCHAR2(30),
GENDER VARCHAR2(10) CHECK(GENDER IN (‘남’,’여‘)),
PHONE VARCHAR2(30),
EMAIL VARCHAR2(50),
GRADE_CODE NUMBER
);
오류
INSERT
INTO USER_CHECK
VALUES
(
1
, 'user01'
, 'pass01'
, '홍길동'
, '남자'
, '010-1234-5678'
, 'hong123@greedy.com'
);
SMALL