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 |