CREATE에 대하여
⭐️ CREATE란 ?
CREATE를 알기전에 DDL (데이터 정의어)를 알아야 한다.
데이터 정의어에는 객체를 새로 만드는(CREATE) , 구조를 변경하는 (ALTER) , 구조체를 삭제 (DELETE) 가 존재한다.
데이텅 정의어는 실제 데이터값이 아닌 규칙 자체를 "정의" 하는 언어이다 ‼️
그중 CREATE에 대해서 알아보자 ✨
우선 객체에 대하여 알아야한다.
🔥 객체
데이터베이스에서 객체는 저장된 데이터 또는 데이터 구조를 관리하는 단위를 의미한다.
데이터베이스의 객체는 일반적으로 테이블 , 뷰 , 인덱스 , 트리거 , 프로시저 등을 포함한다.
⭐️ CREATE
CREATE란 객체를 새로 생성하는 구문이다.
이제 표현식에 대하여 알아보자.
📋 표현식
CREATE TABLE 테이블명(
컬럼명 자료형(크기),
컬럼명 자료형(크기),
컬럼명 자료형(크기),
...
)
⁂ 자료형은 NUMBER , CHAR , VARCHAR2 , DATE 를 주로 사용한다.
자 이제 테이블을 만들어 보았는데, 값이 있어야 삭제 , 조회 , 삽입 , 수정 등 할 수 있다.
이제 값을 삽입(INSERT) 해보자‼️
📋 표현식
INSERT INTO 테이블명 VALUES(값1,값2,값3....);
** VALUES는 컬럼순으로 넣어야 함
근데 여기서 문제가 발생한다. 그냥 값을 넣기만 하면 될까 ? -> ❌
값을 넣을때 예를들어 주민번호 , 아이디 , 비밀번호 이런 값들이 값이 없다면 , 즉 값이 NULL 이라면 될까 ? -> ❌
그리고 또한 중복되는 값이 있으면 될까 ? -> ❌
그래서 우리에게 필요한건 제약조건이다 ‼️
제약 조건에 대해서 알아보자.
⭐️ 제약 조건
제약조건이란 원하는 데이터 값 (유효한 형식의 값) 만 유지하기 위해 특정 컬럼에 설정하는 제약이다.
데이터 무결성 보장을 목적으로 한다 ‼️
종류에는
1 . NOT NULL ( NULL이 들어갈 수 없음)
2 . UNIQUE ( 고유한 값이여야함. 중복 X )
3 . CHECK ( 체크한 값만 들어가야 함 ex ) 성별을 남 또는 여로만 설정 가능 )
4 . PRIMARY KEY ( 기본키 : 데이터베이스에서 테이블의 각 행을 고유하게 식별하는데 사용되는 하나 이상의 컬럼)
5. FOREIGN KEY (외래키 : 데이터베이스에서 한 테이블의 컬럼 또는 컬럼 그룹이 다른 테이블의 기본키 또는
고유키를 참조하도록 설정된 제약 조건 )
이렇게 5가지가 존재한다.
⭐️ NOT NULL
NOT NULL이란 해당 컬럼에 반드시 값이 존재해야만 하는 경우 (즉 , 절대 NULL이 들어오면 안되는 경우)
삽입 / 수정시 NULL값을 허용하지 않도록 제한한다.
그리고 제약 조건을 부여하는 방식에는 크게 두가지 방식이 있다.
1. 컬럼레벨 방식 : 컬럼에 붙여서 사용
EX) MEM_MO NUMBER NOT NULL
2. 테이블레벨 방식 : 컬럼 아래에 작성
EX) NOT NULL(MEM_MO NUMBER)
[코드]
CREATE TABLE MEMBER(
MEM_NO NUMBER NOT NULL,
MEM_ID VARCHAR2(20) NOT NULL, -- user01 ,user02 ...
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3), -- 남 , 여 - 3바이트
PHONE VARCHAR2(13),
EMAIL VARCHAR2 (50),
MEM_DATE DATE
)
⭐️ UNIQUE
UNIQUE란 해당 컬럼에 중복값이 들어가서는 안될 경우 사용.
컬럼값에 중복값을 제한하는 제약조건이다.
사입 / 수정시 기존에 있는 데이터값 중 중복값이 있을 경우 오류를 발생시킨다.
[코드]
CREATE TABLE MEM_UNIQUE(
MEM_NO NUMBER NOT NULL,
MEM_ID VARCHAR2(20) NOT NULL UNIQUE, -- 컬럼레벨 방식
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3), -- 남 , 여 - 3바이트
PHONE VARCHAR2(13),
EMAIL VARCHAR2 (50),
MEM_DATE DATE,
UNIQUE(EMAIL) -- 테이블레벨 방식
);
⭐️ CONSTRAINT ( 제약조건에 제약조건명 부여 )
다음 사진과 같이 제약 조건에 어긋나면 오류가 발생하는데 , 제약 조건에 조건명을 주지 않으면 Developer에서
제공하는 오류 코드를 보여준다. 하지만 여기서 우리가 따로 알아보기 쉽게 제약 조건명을 줄 수 있다‼️
[사용법]
** 제약조건 부여시 제약조건명까지 부여하는 방법
--> 컬럼레벨 방식
CREATE TABLE 테이블명(
컬럼명 자료형 CONSTRAINT 제약조건명 제약조건
)
--> 테이블레벨 방식
CREATE TABLE 테이블명(
컬럼명 자료형,
컬러명 자료형,
CONSTRAINT 제약조건명 제약조건 (컬럼명)
)
[코드]
CREATE TABLE MEM_UNIQUE(
MEM_NO NUMBER CONSTRAINT MEMNO_NT NOT NULL,
MEM_ID VARCHAR2(20) CONSTRAINT MEMID_NT NOT NULL, -- 컬럼레벨 방식
MEM_PWD VARCHAR2(20) CONSTRAINT MEMPWD_NT NOT NULL,
MEM_NAME VARCHAR2(20) CONSTRAINT MEMNAME_NT NOT NULL,
GENDER CHAR(3), -- 남 , 여 - 3바이트
PHONE VARCHAR2(13),
EMAIL VARCHAR2 (50),
MEM_DATE DATE,
CONSTRAINT MEMBERID_UQ UNIQUE(MEM_ID) -- 테이블레벨 방식
);
위와 같이 CONSTRAINT를 사용하여 조건명을 주게 된다면 오류 코드를 본인이 설정한 MEMBERID_UQ에
위배된다고 나온다.
⭐️ CHECK
CHECK는 해당 컬럼에 들어올 수 있는 값에 대한 조건을 제시해줄 수 있다.
해당 조건에 만족하는 데이터 값만 담길 수 있다.
[코드]
CREATE TABLE MEM_CHECK(
MEM_NO NUMBER NOT NULL,
MEM_ID VARCHAR2(20) NOT NULL, -- 컬럼레벨 방식
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3) CHECK(GENDER IN ('남','여')), -- 남 , 여 - 3바이트
PHONE VARCHAR2(13),
EMAIL VARCHAR2 (50),
MEM_DATE DATE,
UNIQUE(MEM_ID) -- 테이블레벨 방식
-- CHECK(GENDER IN ('남','여')) -- 테이블레벨 방식
);
CHECK는 IN 말고도 비교 연산자 , 논리 연산자 , IN 외에 다른 연산자와 표현식도 사용가능하다.
[코드]
INSERT INTO MEM_CHECK
VALUES(1,'USER1','PASS1','김진일','자','01011112222','AAA@AA.COM','24/12/23');
위와 같은 구문은 남 또는 여가 아니기때문에 제약조건에 위배된다.
제약조건이 잘 들어가야 좋은 프로그래밍인거같다.
다음 게시물은 기본키와 외래키에 대해 알아보자 ‼️