공부/TIL

[SQL 첫걸음] 26강 - 28강

2024. 1. 12. 00:25
목차
  1. 26강 : 테이블 작성·삭제 ·변경
  2. 28강 : 인덱스 구조

26강 : 테이블 작성·삭제 ·변경

1. 테이블 작성

CREATE TABLE 사용

mysql> CREATE TABLE sample62 (
    -> no INTEGER NOT NULL,
    -> a VARCHAR(30),
    -> b DATE);
Query OK, 0 rows affected (0.07 sec)

mysql> DESC sample62;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| no    | int         | NO   |     | NULL    |       |
| a     | varchar(30) | YES  |     | NULL    |       |
| b     | date        | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.03 sec)

 

2. 테이블 삭제

DROP TABLE 테이블명

 

- 데이터 행 삭제

TRUNCATE TABLE 테이블명 : 모든 행 삭제 시 빠른 속도로 삭제 가능

 

3. 테이블 변경

ALTER TABLE 테이블명 변경명령

 

- 열 추가

ALTER TABLE 테이블명 ADD 열 정의

mysql> ALTER TABLE sample62 ADD newcol INTEGER;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC sample62;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| no     | int         | NO   |     | NULL    |       |
| a      | varchar(30) | YES  |     | NULL    |       |
| b      | date        | YES  |     | NULL    |       |
| newcol | int         | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

NOT NULL인 열 추가 시엔 기본값 필요

 

- 열 속성 변경

ALTER TABLE 테이블명 MODIFY 열 정의

mysql> ALTER TABLE sample62 MODIFY newcol VARCHAR(20);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC sample62;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| no     | int         | NO   |     | NULL    |       |
| a      | varchar(30) | YES  |     | NULL    |       |
| b      | date        | YES  |     | NULL    |       |
| newcol | varchar(20) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

 

- 열 이름 변경

ALTER TABLE 테이블명 CHANGE [기존 열 이름] [신규 열 정의]

mysql> ALTER TABLE sample62 CHANGE newcol c VARCHAR(20);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC sample62;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| no    | int         | NO   |     | NULL    |       |
| a     | varchar(30) | YES  |     | NULL    |       |
| b     | date        | YES  |     | NULL    |       |
| c     | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

 

- 열 삭제

ALTER TABLE 테이블명 DROP 열명

mysql> ALTER TABLE sample62 DROP c;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC sample62;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| no    | int         | NO   |     | NULL    |       |
| a     | varchar(30) | YES  |     | NULL    |       |
| b     | date        | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

 

4. ALTER TABLE로 테이블 관리

- 최대 길이 연장

ALTER TABLE sample MODIFY col VARCHAR(30)

문자형의 최대 길이를 늘릴 수 있음(기존 데이터가 있어 줄일 수는 없음)

 

- 열 추가

ALTER TABLE sample ADD new_col INTEGER

 

27강 : 제약

1. 테이블 작성시 제약 정의

# 테이블 열에 제약 정의하기
mysql> CREATE TABLE sample631 (
    -> a INTEGER NOT NULL,
    -> b INTEGER NOT NULL UNIQUE,
    -> c VARCHAR(30)
    -> );
Query OK, 0 rows affected (0.01 sec)

# 테이블에 '테이블 제약' 정의하기
mysql> CREATE TABLE sample632 (
    -> no INTEGER NOT NULL,
    -> sub_no INTEGER NOT NULL,
    -> name VARCHAR(30),
    -> PRIMARY KEY (no, sub_no)
    -> );
Query OK, 0 rows affected (0.01 sec)

# '테이블 제약'에 이름 붙이기
mysql> CREATE TABLE sample632 (
    -> no INTEGER NOT NULL,
    -> sub_no INTEGER NOT NULL,
    -> name VARCHAR(30),
    -> CONSTRAINT pkey_sample PRIMARY KEY (no, sub_no)
    -> );

 

2. 제약 추가

# 열 제약 추가
mysql> ALTER TABLE sample631 MODIFY c VARCHAR(30) NOT NULL;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

# 테이블 제약 추가
mysql> ALTER TABLE sample631 ADD CONSTRAINT pkey_sample631 PRIMARY KEY(a);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

 

3. 제약 삭제

# 열 제안 삭제하기
mysql> ALTER TABLE sample631 MODIFY c VARCHAR(30);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

# 테이블 제약 삭제하기
mysql> ALTER TABLE sample631 DROP CONSTRAINT pkey_sample631;

# 기본키 제약 삭제하기
mysql> ALTER TABLE sample631 DROP PRIMARY KEY;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

 

4. 기본키

해당 열이 유일한 값을 가지고 있도록 할 수 있음

# 테이블 작성
mysql> CREATE TABLE sample634 (
    -> p INTEGER NOT NULL,
    -> a VARCHAR(30),
    -> CONSTRAINT pkey_sample634 PRIMARY KEY(p)
    -> );
Query OK, 0 rows affected (0.02 sec)

# sample634에 행 추가
mysql> INSERT INTO sample634 VALUES (1, '첫째줄');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO SAMPLE634 VALUES (2, '둘째줄');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO sample634 VALUES (3, '셋째줄');
Query OK, 1 row affected (0.00 sec)

# sample634에 중복하는 행 추가하기
mysql> INSERT INTO sample634 VALUES (2, '넷째줄');
ERROR 1062 (23000): Duplicate entry '2' for key 'sample634.PRIMARY'

# sample634를 중복된 값으로 갱신하기
mysql> UPDATE sample634 SET p=2 WHERE p=3;
ERROR 1062 (23000): Duplicate entry '2' for key 'sample634.PRIMARY'

 

- 복수의 열로 기본키 구성하기

기본키로는 NULL 비허용, 복수라도 상관 없음

mysql> SELECT a, b FROM sample635;
+---+---+
| a | b |
+---+---+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
+---+---+
5 rows in set (0.01 sec)

 

28강 : 인덱스 구조

1. 인덱스

테이블에 붙여진 색인 -> 검색 속도 향상 ex. SELECT, WHERE

테이블과는 별개로 독립된 데이터베이스 객체

 

2. 검색에 사용하는 알고리즘

이진 트리, 해시가 유명함

- 이진 트리

데이터 구조에 가까움

이진 탐색(binary search)에서 검색하기 쉬운 구조로 한 것

 

- 풀 테이블 스캔(full table scan)

인덱스가 지정되지 않은 테이블 검색 시 사용

테이블에 저장된 모든 값을 처음부터 차례로 조사함

 

- 이진 탐색(binary search)

차례로 나열된 집합에 유효한 검색 방법

집합을 반으로 나누어 조사하는 검색방법

-> 대량의 데이터 검색 시 이진 탐색이 빠름

 

- 이진 트리(binary tree)

인덱스 작성 시 인덱스용 데이터가 저장 장치에 만들어지는데 그때 이진 트리라는 데이터 구조로 작성됨

 

3. 유일성

이진 트리에선 집합 내에 중복하는 값을 가질 수 없음

 

 

 

'공부 > TIL' 카테고리의 다른 글

[SQL 첫걸음] 32강 - 36강  (1) 2024.01.15
[SQL 첫걸음] 29강 - 31강  (1) 2024.01.13
[SQL 첫걸음] 23강 - 25강  (1) 2024.01.10
[SQL 첫걸음] 20강 - 22강  (1) 2024.01.08
[SQL 첫걸음] 17강 - 19강  (0) 2024.01.06
  1. 26강 : 테이블 작성·삭제 ·변경
  2. 28강 : 인덱스 구조
'공부/TIL' 카테고리의 다른 글
  • [SQL 첫걸음] 32강 - 36강
  • [SQL 첫걸음] 29강 - 31강
  • [SQL 첫걸음] 23강 - 25강
  • [SQL 첫걸음] 20강 - 22강
Ail_
Ail_
logAil_ 님의 블로그입니다.
Ail_
log
Ail_
  • 분류 전체보기 (182)
    • 사설 (11)
      • 강연 (5)
      • * (3)
      • 회고 (3)
    • 공부 (161)
      • Just do it (3)
      • TIL (66)
      • Game Bootcamp (31)
      • Digital Twin Bootcamp (39)
    • 노션 (3)
    • 프로젝트 (23)
      • Game Bootcamp (1)
      • Digital Twin Bootcamp (21)
      • 경기청년 갭이어 (1)

인기 글

최근 글

태그

  • 개발일지
  • 이펙트
  • 플레이어
  • 멋쟁이사자처럼
  • mysql 설치
  • 부트캠프
  • 유니티
  • notion
  • 공격
  • 피격
  • 오블완
  • 대시
  • SQL첫걸음
  • 인터랙티브 웹 UX·UI
  • 티스토리챌린지
  • 템플릿
  • 유니티 게임 개발
  • 회고
  • Do it! 자료구조와 함께 배우는 알고리즘 입문 : 파이썬 편
  • unity
  • TypeScript
  • 노션
  • SQL 첫걸음
  • node.js
  • Chat
  • 한입 크기로 잘라 먹는 타입스크립트
  • 배포
  • 데이터베이스
  • C#
  • 개발회고

최근 댓글

전체
오늘
어제
hELLO · Designed By 정상우.
Ail_
[SQL 첫걸음] 26강 - 28강
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.