DDL(Data Definition Langauge)
: 데이터 정의어(데이터베이스를 정의하는 언어)
: 데이터가 아닌 CREATE에 의해 생성된 것을 기준으로 함(즉, 데이터베이스, 테이블, 뷰, 인덱스 등의 데이터베이스 개체를 대상으로 함)
: CREATE(생성), ALTER(변경), TRUNCATE(잘라내기), DROP(삭제)
[데이터베이스 생성 및 삭제]
-- 데이터베이스 생성
CREATE DATABASE 데이터베이스명;
-- 데이터베이스 삭제
DROP DATABASE 데이터베이스명;
CREATE
[테이블 생성]
CREATE TABLE 테이블명(
칼럼명1 데이터 타입 PRIMARY KEY,
칼럼명2 데이터 타입 NOT NULL,
칼럼명3 데이터 타입 DEFAULT 값,
....,
PRIMARY KEY(칼럼명1)
);
: PRIMARY KEY
- NOT NULL(default)이면서 UNIQUE하고 유일한 것으로 칼럼과 함께 지정도 가능하고, 마지막에 작성도 가능하며, 추후 추가도 가능
: NOT NULL - NULL을 허용하지 않음
: DEFAULT 값 - 작성한 값으로 디폴트 값 지정
[기존 테이블에서 데이터 가져와 테이블 생성]
CREATE TABLE 생성할 테이블명 AS (복사할 테이블의 SELECT문 작성)
CREATE TABLE emp_sub
AS SELECT empno, ename, job, hiredate, sal FROM emp WHERE deptno=10;
[빈 테이블 생성]
CREATE TABLE 생성할 테이블명 AS (SELECT * FROM 테이블명 WHERE 거짓조건문);
CREATE TABLE emp_t AS SELECT * FROM emp WHERE 1=2;
ALTER
[이미 생성된 테이블에 칼럼 추가]
ALTER TABLE 테이블명 ADD 칼럼명 데이터 형식 및 권한 설정;
[이미 있는 칼럼 데이터 형식 변경]
ALTER TABLE 테이블명 MODIFY COLUMN 변경할 칼럼명 변경할 데이터형식;
[칼럼 삭제]
ALTER TABLE 테이블명 DROP 칼럼명;
[칼럼명 변경]
ALTER TABLE 테이블명 RENAME COLUMN 기존 칼럼명 TO 변경할 칼럼명;
[테이블명 변경]
RENAME TABLE 기존 테이블명 TO 변경할 테이블명;
[테이블 삭제]
DROP TABLE 테이블명;
[데이터 삭제]
TRUNCATE TABLE 테이블명;
DELETE FROM 테이블명 (WHERE 조건절);
- TRUNCATE는 테이블을 삭제하지는 않지만 테이블의 내용은 모두 삭제하며, 메모리까지 삭제
- DELETE는 테이블을 삭제하지 않고 모든 데이터가 삭제되지만, 메모리는 유지
[constraint(제약조건)]
- PRIMARY KEY : 동일한 데이터 및 NULL값을 허용하지 않음 (unique & not null)
- NOT NULL : NULL값이 허용되지 않음
CREATE TABLE temp(
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL
);
INSERT INTO temp VALUES(null, 'jung'); -- 에러 : id에 null 값이 들어갈 수 없음
INSERT INTO temp VALUES(1, 'jang');
INSERT INTO temp VALUES(1, 'gong'); -- 에러 : 동일한 id 생성 불가
INSERT INTO temp VALUES(2, NULL); -- 에러 : 이름에 null이 들어갈 수 없음
- UNIQUE : 동일한 데이터를 허용하지 않지만 null은 허용되며, null은 중복도 허용
CREATE TABLE temp2(
email VARCHAR(50) UNIQUE
);
INSERT INTO temp2 VALUES(null);
INSERT INTO temp2 VALUES('kosta@kosta.com');
INSERT INTO temp2 VALUES(null);
INSERT INTO temp2 VALUES('kosta@kosta.com'); -- 에러 : email 중복
- CHECK : 값의 범위 제한. check(조건)
CREATE TABLE temp3(
name VARCHAR(20) NOT NULL,
age INT DEFAULT 1 CHECK(age>0)
);
-- 칼럼값을 전부 넣을 것이 아닌 경우 칼럼명 명시가 필요
INSERT INTO temp3 (name) VALUES('hong');
INSERT INTO temp3 VALUES('song', -2); -- 에러 : age>0이라는 check 조건을 만족하지 않음
INSERT INTO temp3 VALUES('song', 1);
'공부 자료 > DataBase' 카테고리의 다른 글
[ Trigger ] 트리거와 트리거 함수 (0) | 2024.07.19 |
---|---|
[SQL] DML - 데이터 조작어 (0) | 2023.09.07 |
[SQL] limit - 데이터를 일부만 가져오기 (0) | 2023.09.06 |
[SQL] 서브쿼리 (0) | 2023.09.06 |
[SQL] JOIN(INNER, LEFT, RIGHT, SELF, FULL, NATURAL) (0) | 2023.09.05 |