본문 바로가기

DataBase

DATABASE, SCHMA / Table 생성하기 (Maria DB)

CREATE - DATABASE, SCHMA, Table 생성하기

DATABASE, SCHMA 만들기

-- DATABASE, SCHEMA 만들기
CREATE DATABASE 데이터베이스명;

Table 만들기

CREATE TABLE 테이블명 (컬럼명 컬럼타입 제약사항, 컬럼명 컬럼타입 제약사항, ...);

컬럼 타입

INT (정수형)

CREATE TABLE 테이블명 (컬럼명 INT, 컬럼명 INT);

DEC (실수형)

CREATE TABLE 테이블명 (컬럼명 DEC(길이, 소수점 자리 수));

-- DEC(2,1) := 1.2
-- DEC(3,2) := 12.3
-- DEC(5,2) := 123.45

VARCHAR (문자열)

CREATE TABLE 테이블명 (컬럼명 VARCHAR(문자 길이));
CREATE TABLE table1 (col1 VARCHAR(100)); -- 100글자 까지

DATE, DATETIME - (날짜, 날짜시간)

-- DATE : YY:MM:DD / DATETIME : YY:MM:DD HH:MM:SS:ss
CREATE TABLE 테이블명 (컬럼명 DATE, 컬럼명 DATETIME);

 

컬럼 타입이거 말고 더 있으니 인터넷 검색해서 찾아보기


제약 사항

NULL, NOT NULL - NULL 허용여부

-- NULL : NULL 값 허용 / NOT NULL : NULL 값 허용 안함 
-- NULL 명시 안하면 기본 값은 NULL 허용임
CREATE TABLE 테이블명 (컬럼명 타입 NULL, 컬럼명 타입 NOT NULL);

UNIQUE - 유일 값 또는 고유 값

CREATE TABLE 테이블명 (컬럼명 타입 UNIQUE);
-- col1 에 100인 값이 들어있는 경우 또 100인 값이 들어올 수 없음
CREATE TABLE table1 (col1 INT UNIQUE);

DEFAULT - 기본 값

CREATE TABLE 테이블명 (컬럼명 타입 DEFAULT 기본값);
CREATE TABLE table1 (col1 INT DEFAULT 100); -- col1의 기본값은 100으로 설정

CHECK - 값의 유효범위

CREATE TABLE 테이블명 (컬럼명 타입 CHECK( 조건범위 지정 ));
CREATE TABLE table1 (
    col1 INT CHECK ( col1 > 100 ), -- col2는 100보다 큰 값이 들어가야 한다.
    col2 INT CHECK ( col2 > 1000 AND col3 < 2000 ) -- col3는 1000보다크고 2000보다 작아야 한다.
);

 

PRIMARY KEY - 기본 키 설정(고유 식별번호) / 여러개 지정 가능하나 가급적 하나의 PK만 설정 권장

CREATE TABLE 테이블명 (컬럼명 타입 PRIMARY KEY, 컬럼명 타입 제약사항, ...);
-- idx 가 pk가 되고 고유의 값을 갖는다(중복 불가 / NOT NULL UNIQUE)
CREATE TABLE table (idx INT PRIMARY KEY, col1 VARCHAR(100) NOT NULL);

 

AUTO_INCREMENT - 자동 증가 / 보통 PK와 같이 사용됨 

-- PRIMARY KEY를 부여할 때 값이 들어간채로 생성 되어야 하니 
-- AUTO_INCREMETN로 1부터 자동 증가하는 숫자를 부여
CREATE TABLE 테이블명 (컬럼명 타입 PRIMARY KEY AUTO_INCREMENT, 컬럼명 타입 제약사항, ...);
CREATE TABLE table (idx INT PRIMARY KEY AUTO_INCREMENT, col1 VARCHAR(100) NOT NULL);

 

REFERENCES - 참조 / 외래키(FOREIGN KEY) / 1:n의 관계

- 예를 들어 어느 회사 인력 정보의 이름, 부서가 있다고 가정

회사 인사관리 테이블

- 근데 만약 회사의 부서개편으로 인해 경영지원실의 명칭이 경영관리센터로 변경 됐다면

- 기존 경영지원실의 부서 사람들 모두 수동으로 바꿔줘야한다.

- 하지만 부서 테이블이 따로 있고 (정규화 3NF)

부서 테이블

- 인사관리 테이블이 부서 테이블의 pk를 참조한다면 

- 부서 테이블의 이름만 바꾸면 굳이 인사관리 테이블의 부서들을 하나씩 변경할 필요가 없다.

-- FK를 넣어 참조하는 테이블을 생성한 예제
CREATE TABLE 회사 인사관리 테이블
(
    idx        INT PRIMARY KEY AUTO_INCREMENT,
    name       VARCHAR(10),
    department_code INT REFERENCES 부서 테이블(부서 테이블의 pk 또는 unique 값) 
    -- 참조할 PK 타입과 동일하게 해야함
    -- 컬럼명은 컬럼명_참조할 테이블의 pk명
    -- REFERNCES 다른 말로 외래키 (FOREIGN KEY) 라고도 한다.
);

회사 인사관리 테이블

- 회사 코드를 참조 하기 때문에 부서 테이블에서 부서 명칭만 바꾸면 참조된 인사관리 테이블에서도 바뀐다.

인사관리 테이블 -> 부서 테이블의 PK를 참조

 

참고로 PK 말고도 UNIQUE 에도 적용이 가능하다.


제약 사항은 여러개 이어서 작성 가능

CREATE TABLE 테이블명 (컬럼명 타입 제약사항, 컬럼명 타입 제약사항 제약사항 제약사항, ...);
CREATE TABLE table (
	idx INT PRIMARY KEY AUTO_INCREMENT, 
    	col1 INT NOT NULL CHECK (col1 > 100 AND col1 < 200 ) UNIQUE 
);

제약 사항도 이거 말고 더 있으니 인터넷 검색해서 찾아보기

테이블의 제약사항 및 어떤 쿼리문으로 작성 됐는지 확인하기

-- 테이블의 컬럼과 타입, 제약사항 등을 확인
-- describe, DESC
DESC 테이블명;

-- TABLE 생성 쿼리 확인
SHOW CREATE TABLE 테이블명;

 

 

반응형

'DataBase' 카테고리의 다른 글

JOIN - 테이블 끼리 결합 (Maria DB)  (1) 2023.10.12
데이터베이스 정규화(Normalization)  (0) 2023.10.12
Maria DB SQL 쿼리문  (0) 2023.10.06
MYSQL merge into (update, insert)  (0) 2023.05.17
SQL 문법  (0) 2023.01.12