📌테이블 생성
테이블을 생성, 변경 및 삭제 할때는 DDL(Data Definition Language)을 사용해야 한다.
테이블을 생성할 때는 CREATE TABLE 문법을 사용한다. 이 구문은 DBMS에 따라 다르기 때문에 각자가 사용하는 DBMS 설명서를 참고해야 한다.
💡일반적으로 테이블 생성하는 방법
CREATE TABLE 생성할 테이블명
(
열 이름 데이터 형식(크기) NOT NULL,
열 이름 CHAR (10) PRIMARY KEY,
열 이름 CHAR (10) NOT NULL
REFERENCES 테이블1 (테이블1 고유키),
열 이름 INTEGER NOT NULL DEFAULT 1,
열 이름 VARCHAR(100) NULL
);
테이블을 만들려면 기본적으로 생성할 테이블명, 그에 속할 열 이름, 데이터 형식 및 정의를 지정해야 한다.
만약 데이터가 NULL값을 허용하지 않는다면 NOT NULL이라는 옵션을 적는다. NOT NULL로 지정된 열에 NULL값이 쓰여지면 데이터에 오류가 발생한다.
DEFAULT 1이라고 지정한 후 해당 열에 값을 지정하지 않는다면 자동으로 1이라고 저장된다.
PRIMARY KEY 옵션은 기본 키를 설정할 때 사용한다. 기본 키는 테이블의 각 행을 고유하게 식별하기 위해 사용되는 것으로, 데이터 제어에 상당히 중요한 역할을 하고, 기본 키는 테이블을 만들 때 지정한다. 참고로 기본 키값은 NULL값일 수 없고 고유해야 하며, 변경하거나 업데이트 될 수 없다.
외래 키는 해당 테이블에서 다른 테이블의 기본 키에 해당하는 값을 포함할 때 사용되는 것으로, 데이터베이스의 무결성을 유지하기 위한 필수 조건이다.
EX)
CREATE TABLE ORDERS
{
ORDER_ID CHAR(10) PRIMARY KEY,
CUST_ID CHAR(4) NOT NULL REFERENCES CUSTOMERS(CUST_ID)
};
주문 테이블에는 주문 번호와 주문한 고객 아이디가 저장된다. 주문 테이블에서 정의된 CUST_ID는 REFERENCES라는 키워드를 사용하였다. 이는 ORDERS 테이블에 CUST_ID를 외래키로 지정하겠다는 의미이고, 이 CUST_ID는 CUSTOMERS테이블에 기본 키로 지정되어 있는 값임을 나타낸다. 즉, ORDERS 테이블에서 사용되는 CUST_ID는 반드시 CUSTOMERS테이블에 있는 값이어야 함을 말한다.
💡데이터 형식
타입 | 데이터 형식 | 설명 |
문자형 | CHARACTER(n) 또는 CHAR(n) |
고정 길이의 문자 데이터를 4000Byte 저장할 수 있다. 고정폭 n-문자열로 필요한 만큼 공백으로 채워진다. |
NATIONAL VARYING(n) 또는 NCHAR(n) |
CHAR타입과 기본적으로 같은 공간 관리를 한다. 다양한 언어의 문자값을 저장하고 조회할 수 있는 기능을 가지고 있다. | |
CHARACTER VARYING(n) 또는 VARCHAR(n) |
N문자의 최대 크기를 가진 가변폭 문자열이다. 입력되는 문자의 길이와 정의된 공간의 길이보다 적더라도 나머지 공간을 여백으로 채우지 않고 필요한 공간만 사용한다. | |
NVARCHAR(n) | 가변폭 NCHAR문자열이다. | |
숫자형 | BIT | 단일 비트값이다. |
NUMERIC(p,s) 또는 DECIMAL(p,s) |
p는 전체 자리 값을 의미하고, s는 소수점 이하 자릿수를 의미한다. ex) 7891.234 -> p:6 s:3 |
|
FLOAT | 실수값이다. | |
INTEGER 또는 INT | 숫자를 지정할 수 있는 4Byte 정수값이다. | |
날짜 및 시간 |
DATE | 날짜값이다. ex) 2020-12-12 |
TIME | 시간값이다. ex)15:55:55 |
|
TIMESTAMP | DATE와 TIME이 하나의 변수로 결합된 형태이다. ex) 2020-12-12 15:55:55 |
💡하위 쿼리에 의해 검색된 테이블과 동일한 구조로 테이블 생성
CREATE TABLE 생성할 테이블명 AS SELECT 열 이름1, 열 이름2 FROM 복사할 테이블명;
이 방법은 하위 쿼리와 동일한 구조의 테이블로 생성하는 방법이다. 만약 테이블 전체를 복사하고 싶은 경우 SELECT절 뒤에 와일드카드 '*'를 적으면 된다.
📌테이블 변경(수정) 및 삭제
테이블을 변경할 때는 ALTER TABLE문을 사용한다.
몇몇의 DBMS에서는 테이블의 열을 제거하거나 변경하는 것을 허용하지 않기 때문에 각 DBMS의 설명서를 참조해야 한다.
데이터가 포함된 테이블의 구조는 변경하지 않는 것이 좋다. 테이블을 만들 때 충분한 검토를 했고 그 안에 이미 데이터가 축적되어 있기 때문에 데이터 형식이 변경되면 기존 데이터에 영향을 미쳐 데이터 손실로 이어질 수 있기 때문이다.
💡테이블 변경(열을 추가할 때)
ALTER TABLE 테이블명
ADD (추가할 열 이름1 데이터 형식(크기),
추가할 열 이름2 데이터 타입
...
);
- 테이블을 수정할 때는 ALTER TABLE을 적으면 된다. 만약 열을 추가하고 싶으면 ADD 키워드를 사용하면 된다.
- 새로운 열을 추가할 수 있지만 테이블에 있던 기존의 열은 삭제할 수 없다.
- 새로 생성되는 열은 위치를 지정할 수 없다.(테이블의 마지막에 위치한다.)
💡테이블 변경(데이터 구조를 변경할 때, 열 수정할때)
ALTER TABLE 테이블명 MODIFY (변경할 열 이름1 변경할 데이터 타입(크기),
변경할 열 이름2 변경할 데이터 타입
...
);
데이터 구조를 변경할 때는 MODIFY키워드를 사용하면 된다.
EX1) NOT NULL인 COLUMN을 NULL 허용으로 바꾸고 싶은 경우
-- ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 데이터타입;
ALTER TABLE board MODIFY COLUMN board_file varchar(50);
EX2) NULL을 NOT NULL로 바꾸고 싶은 경우
-- ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 데이터타입 NOT NULL;
ALTER TABLE board MODIFY COLUMN board_file varchar(50) NOT NULL;
EX3) 열의 위치를 바꾸고 싶은 경우
--ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 자료형 AFTER 다른컬럼명;
ALTER TABLE board MODIFY COLUMN boardTitle varchar(10) AFTER boardNo;
boardTitle 컬럼의 위치가 boardNo 컬럼 뒤로 바뀐다.
💡열 이름 바꾸기
ALTER TABLE 테이블 이름 RENAME COLUMN 열 이름1 to 바꾸려는 열 이름1;
💡열 삭제하기
ALTER TABLE 테이블 이름 DROP CLOUMN 열 이름;
💡테이블명 변경
--방법1
RENAME TABLE 변경전테이블명 TO 변경후테이블명;
--방법2
ALTER TABLE 번경전테이블명 RENAME 변경후테이블명
💡테이블의 내용 삭제
TRUNCATE TABLE 테이블 이름;
TRUNCATE TABLE 명령어는 테이블의 데이터를 모두 삭제하고 사용하던 기억 공간도 해제한다. 테이블에 생성된 인덱스와 같은 객체도 같이 삭제된다. 다만 테이블의 모든 데이터가 삭제되지만 테이블의 구조는 삭제되지 않는다.
삭제여부를 묻지 않으며 삭제된 데이터는 자동으로 커밋된다.
💡테이블 삭제
DROP TABLE 삭제할 테이블명;
DROP TABLE명령어는 테이블을 완전히 삭제한다. 테이블을 삭제할 때 데이터 베이스는 테이블에 있는 모든 자료와 그와 연관된 모든 인덱스를 삭제하고 사용하고 있던 저장 공간을 돌려준다.
- 테이블의 모든 구조와 데이터가 삭제된다.
- DDL명령이므로 트랜잭션이 자동으로 커밋된다.
- 모든 인덱스와 제약 조건이 삭제된다.
명령어 | DELETE | TRUNCATE | DROP |
구분 | DML | DDL | DDL |
기능 | 데이터만 삭제 | 테이블 구조만 남겨주고 데이터 삭제(데이터, 인덱스, 테이블 공간 삭제 | 테이블 포함 전체 삭제(데이터, 인덱스, 테이블 공간, 테이블 삭제) |
'DBMS > SQL, RDBMS' 카테고리의 다른 글
MySQL 페이징 처리 및 개수 제한하여 출력: LIMIT, OFFSET (0) | 2022.06.28 |
---|---|
[SQL]데이터 무결성 & 트랜잭션 & 가상 테이블 (0) | 2022.06.25 |
[SQL]DML(데이터 삽입 & 수정 & 삭제) (0) | 2021.08.11 |
SQL 하위 쿼리(Sub-query) (0) | 2021.08.10 |
SQL 테이블 합치기 (조인과 집합) (0) | 2021.08.10 |