본문 바로가기

DB

DB_2강

  데이터 타입(자료형)

1. 문자형

5.0.3 이전 버전은 byte로, 이후 버전은 글자수로 크기 지정한다.

종류는 다음과 같다.

  • CHAR(n) : 고정 길이 (n의 수치로 크기를 결정, 255자)
  • VARCHAR(n) : 가변 길이 (n의 수치로 크기를 결정, 65,535byte) ★많이 씀
  • TEXT(n) : VARCHAR과 같으나 조회 속도가 느림 (65,535byte) 보통 크기를 설정하지 않은 채 사용
  • TINYTEXT(n) : 255자
  • MEDIUMTEXT(n) : 16,777,215자
  • LONGTEXT(n) : 4,294,967,295자
  • JSON : json 형태로 저장 (ex { '이름' : '홍길동', '나이':20 } )

2. 숫자형

  • TINYINT(n) : 정수(-128 ~ 127)
  • SMALLINT(n) : (-32,768 ~ 32,767)
  • MEDIUMINT(n) : (-8,388,608 ~ 8,388,607)
  • INT(n) : (-2,147,483,548 ~ 2,147,483,547)
  • BIGINT(n) : 무제한
  • FLOAT(n, d) : 실수 (n = 전체 길이 / d = 소수점 이후) (ex (7,2) => 99,999.99 => 부동 소수점) ★많이 씀
  • DEFCIMAL(n, d) : 고정 소수점
  • DOUBLE(n, d) : 부동 소수점(문자열로 저장)

3. 날짜형

  • DATE : 날짜(년, 월, 일) 형태
  • TIME : 시간(시, 분, 초) 형태
  • DATETIME : 날짜와 시간이 합쳐진 형태 (8byte) 1000-01-01 부터 ★많이 씀
  • TIMESTAMP : 날짜와 시간이 합쳐진 형태 (4byte) 1970-01-01 부터
  • YEAR : 년도만 저장하는 형태

4. 이진 데이터형(binary)

  • BINARY(n) & BYTE(n) : CHAR 형태의 이진 데이터
  • VARBINARY(n) : VARCHAR 형태의 이진 데이터
  • TINYBLOB(n) : 이진 데이터(파일류) 255byte
  • BLOB(n) : 65,535byte
  • MIDIUMBLOB(n) : 16,777,215byte
  • LONGBLOB(n) : 4,294,967,295byte

* 위지윅(WYSIWYC, What You See Is What You Get) : 보이는대로 처리한다 => (웹 에디터) BLOB 타입 사용

  제약조건

제약조건이란 데이터의 무결성을 지키기 위해 데이터를 입력할 때 실행되는 검사 규칙을 말한다.

주로 CREATE문이나 ALTER문에서 사용한다.

 

제약조건 사용 방식)

  • 컬럼 작성 시 같이 사용
  • CONSTRAINT 키워드로 나중에 추가

1. 기본값

  • NOT NULL : 해당 컬럼에 NULL이 들어갈 수 없음 (반드시 입력)
  • UNIQUE : 해당 컬럼에 중복값을 허용하지 않음
  • PRIMARY KEY : 해당 컬럼을 기본키로 설정 (NOT NULL + UNIQUE)
  • FOREIGN KEY : 해당 컬럼을 외래키로 설정
  • DEFAULT : 해당 컬럼에 기본값을 설정
-- 회원테이블 생성(제약조건 추가)
CREATE TABLE member (
   m_id VARCHAR(20) PRIMARY KEY,
   m_pwd VARCHAR(20) NOT NULL,
   m_name VARCHAR(10) NOT NULL,
   m_age INT,
   m_job VARCHAR(20),
   m_grade VARCHAR(10) DEFAULT 'silver',
   -- DEFAULT : 비어있다면 'silver'를 넣자
   -- 따라서 NOT NULL은 DEFAULT와 굳이 같이 쓰진 않음
   m_point INT DEFAULT 0
);

 

2. CONSTRAINT 키워드

'CONSTRAINT'는 앞서 말한 제약조건 사용 방식 중 두 번째에 해당하는 방식으로, 특정 컬럼에 제약조건을 설정하기 위한 명렁어이다.

  • UNIQUE => CONSTRAINT 제약조건명 UNIQUE (컬럼명)
  • PRIMARY KEY => CONSTRAINT 제약조건명 PRIMARY KEY (컬럼명)
  • FOREIGN KEY => CONSTRAINT 제약조건명 FOREIGN KEY (컬럼명) REFERENCES 테이블명 (컬럼명)

* 제약조건명 : 제약조건의 관리가 따로 가능하면 해당 제약조건을 나중에 변경하거나 제거할 때 구분할 수 있도록 하기 위해 사용한다. 보통 테이블명과 컬럼명, 제약조건의 단어를 조합하여 작명한다. ex) member 테이블의 기본키 : m_id_pk

 

-- 제조회사 테이블
CREATE TABLE company (
    c_name VARCHAR(20),
    c_phone VARCHAR(15) NOT NULL,
    c_loc VARCHAR(50) NOT NULL,
    c_manager VARCHAR(10) NOT NULL,
    
    CONSTRAINT c_n_pk PRIMARY KEY (c_name)
);

-- 상품 테이블
CREATE TABLE product (
    p_no INT PRIMARY KEY,
    p_cname VARCHAR(20) NOT NULL,
    p_name VARCHAR(20) NOT NULL,
    p_amount INT DEFAULT 0,
    p_price INT NOT NULL,
    cp_date DATE,
    cp_amount INT,
    
    CONSTRAINT p_c_fk FOREIGN KEY (p_cname) REFERENCES company (c_name)
);

  삭제와 수정

1. 테이블의 삭제와 수정

삭제 = DROP TABLE { 테이블명 };

수정 : ALTER TABLE { 테이블명 } + 수정 설정 동작

 

수정 설정 동작)

  • 컬럼 추가 : ADD COLUMN { 컬럼명 } { 타입 };
  • 컬럼 변경 : MODIFY COLUMN { 컬럼명 } { 변경타입 }; => 해당 컬럼에 데이터가 있을 경우 변경 불가
  • 컬럼명 변경 : CHANGE COLUMN { 기존컬럼명 } { 새컬럼명 }; => 타입도 함께 변경 가능
  • 컬럼 삭제 : DROP COLUMN { 컬럼명 };
  • 테이블명 변경 : RENAME { 새테이블명 };
ALTER TABLE testtbl
ADD COLUMN phone VARCHAR(15);

ALTER TABLE testtbl
MODIFY COLUMN phone VARCHAR(20);

ALTER TABLE testtbl
CHANGE COLUMN phone t_phone VARCHAR(20);

ALTER TABLE testtbl
DROP COLUMN t_phone;

ALTER TABLE testtbl
RENAME test_tbl;

 

2. 참조되는 테이블의 삭제와 수정

ON DELETE = 참조되는 테이블의 값이 삭제될 경우
ON UPDATE = 참조되는 테이블의 값이 수정되는 경우

 

설정 동작)

  • CASCADE : 참조하는 테이블의 값도 같이 처리
  • SET NULL : 참조하는 테이블의 값을 NULL로 변경
  • NO ACTION : 참조하는 테이블의 값에 아무 변경 안 함
  • SET DEFAULT : 참조하는 테이블의 값을 기본값으로 변경
  • RESTRICT : 참조되는 테이블의 값이 변경 불가
-- 주문 테이블
CREATE TABLE ordertbl (
    o_no INT PRIMARY KEY,
    o_mid VARCHAR(20) NOT NULL,
    o_pno INT NOT NULL,
    o_amount INT NOT NULL,
    o_loc VARCHAR(50) NOT NULL,
    o_date DATE,
    
    CONSTRAINT o_m_fk FOREIGN KEY (o_mid)
    REFERENCES member (m_id),
    
    CONSTRAINT o_p_fk FOREIGN KEY (o_pno)
    REFERENCES product (p_no)
    ON UPDATE CASCADE ON DELETE CASCADE
    -- 참조되는 테이블 : member / 참조하는 테이블 : ordertbl(외래키가 있는 테이블)
    -- 상품 테이블의 상품번호를 수정/삭제하면, 그 번호를 사용하는 주문의 정보도 같이 수정/삭제한다.
);

 

* 자동으로 증가하는 정수값을 사용하는 컬럼 설정 방법

AUTO_INCREMENT : 1씩 증가하는 정수값이 자동으로 삽입되며, 정수형 기본키 컬럼에만 사용

 

ex)
      CREATE TABLE datatbl (
           d_no INT AUTO_INCREMENT PRIMARY KEY,
           d_data1 VARCHAR(10) NOT NULL,
            ...
       );

  제약조건의 추가와 삭제

  • 기본키 추가 : ADD PRIMARY KEY (컬럼명);
  • 기본키 삭제 : DROP PRIMATY KEY;
  • 외래키 추가 : ADD CONSTRAINT 제약조건명 FOREIGN KEY (컬럼명) REFERENCES 테이블명 (컬럼명);
  • 외래키 삭제 : DROP FOREIGN KEY 제약조건명;
  • 제약조건 추가/삭제 : ADD CONSTRAINT {제약조건명_키워드}; / DROP CONSTRAINT 제약조건명;
ALTER TABLE test_tbl
ADD PRIMARY KEY (t_id);

ALTER TABLE test_tbl
ADD CONSTRAINT t_c_fk FOREIGN KEY (t_name)
REFERENCES company (c_name);

'DB' 카테고리의 다른 글

DB_5강  (0) 2022.10.06
DB_4강  (0) 2022.10.05
DB_3강  (0) 2022.10.03
DB_1강  (0) 2022.10.01
DB_0강(DB 다운 및 설치)  (0) 2022.09.27