DB06 - SQL DDL

2025. 2. 15. 09:23·🏫 한동대학교/Database
728x90
아젠다

- SQL DDL (데이터 정의 언어)

 

SQL 명령어

 

Data Definition Language (데이터 정의 언어)

1. SQL 데이터 정의 언어(DDL)는 관계에 대한 정보를 지정할 수 있도록 하며, 포함 내용은 다음과 같다

- 각 관계의 스키마

- 각 속성에 대한 값의 유형

- 무결성 제약 조건

- 각 관계에 대해 유지해야 할 인덱스 집합 (Set of indices)

- 각 관계에 대한 보안 및 권한 정보

- 디스크에서 각 관계의 물리적 저장(physical storage) 구조

 

2. 주요 세 가지 명렁

- CREATE

- ALTER 

- DROP

 

데이터베이스 생성 (CREATE DATABASE)

: 새로운 데이터베이스를 초기화하기 위해 사용한다.

1. 기본 문법

CREATE DATABASE 데이터베이스_이름;

이 명령어와 함께 기본 문자 인코딩 방식을 지정할 수도 있다.

CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

 

  • Collation(정렬 규칙): 문자 문자열을 비교하고 정렬하는 규칙의 집합이다.

2. 데이터베이스를 생성한 후, 이를 사용하려면 다음 명령어를 실행한다.

USE 데이터베이스_이름;
테이블 생성 (CREATE TABLE)

: 새로운 테이블을 생성하기 위해 사용한다.

1. 기본 문법

CREATE TABLE 테이블_이름(
    열1_이름 데이터_타입[(크기)],
    열2_이름 데이터_타입[(크기)]
);

2. 예: 네 개의 열을 가진 테이블 생성

CREATE TABLE books(
    ISBN CHAR(20),
    Title CHAR(50),
    AuthorID INTEGER,
    Price FLOAT
);

SQL의 데이터 타입 (Data Types in SQL)

: 대부분의 데이터베이스 관리 시스템(DBMS)에서 존재하는 데이터 타입의 범주는 다음과 같다.

  • 문자열 데이터 (String data)
  • 숫자 데이터 (Numeric data)
  • 시간 데이터 (Temporal data)
  • 대용량 객체 (Large objects)
Domain Types in SQL (SQL의 도메인 유형)

1. SQL 데이터 유형 - (1)

1) CHAR(n): 사용자가 지정한 길이 n의 고정 길이 문자(Fixed length) 문자열

- 최대 길이 n = [0, 255]

2) VARCHAR(n): 사용자가 지정한 최대 길이 n의 가변 길이 문자(Variable length) 문자열

- 최대 길이 n = [0, 65,535]

- 길이가 항상 같은 경우 CHAR 타입 속성을 사용하고, 길이가 크게 변동하는 문자열을 저장하는 경우 VARCHAR 타입 속성을 사용하라

3) TEXT: VARCHAR 범위를 초과하는 문자열

- TINYTEXT : 0 – 255 바이트

- TEXT : 0 – 65,535 바이트

- MEDIUMTEXT : 0 – 16,777,215 바이트

- LONGTEXT : 0 – 4,294,967,295 바이트

 

2. CHAR와 VARCHAR의 차이

 

3. “\”%ab%\””

-> "%ab%"가 출력이 된다.

 

 

4. SQL 데이터 유형 - (2)

1) INT, INTEGER: 정수(기계 의존적인 유한 정수 집합)

2) SMALLINT: 작은 정수(정수 도메인 타입의 기계 의존적 하위 집합)

3) BIGINT: 큰 정수(정수 도메인 타입의 기계 의존적 하위 집합)

4) TINYINT 및 MEDIUMINT도 사용 가능

 

5. 다양한 R-DBMS는 이러한 정수 유형의 조합을 다르게 지원한다

- 예를 들어, Oracle은 NUMBER 데이터 유형만 있다

 

6. SQL 데이터 유형 - (3)

1) NUMERIC(p,d): 사용자가 지정한 p 자리의 정밀도로 고정 소수점 숫자(정확한 값)이며, 소수점 오른쪽에 d 자리의 숫자가 있다

- 예: NUMERIC(3,1)은 44.5를 정확히 저장할 수 있지만 444.5 또는 0.32는 저장할 수 없다

- MySQL에서 DECIMAL은 NUMERIC이다

2) FLOAT: 단정도 부동 소수점 숫자(근사값)

3) REAL, DOUBLE: 이중 정밀도의 부동 소수점 숫자(근사값)

 

7. DECIMAL vs INT/FLOAT/DOUBLE

1) FLOAT와 DOUBLE은 DECIMAL보다 빠르다

2) DECIMAL 값은 정확하다

(1) 예시

- SELECT SUM(…)에서 DECIMAL 값은 정확하다

 


 

8. SQL 데이터 유형 - (4)

1) DATE: ‘YYYY-MM-DD’

(1) 범위: 1000-01-01 ~ 9999-12-31

(2) 예: ‘2020-03-01’은 2020년 3월 1일을 나타낸다

2) TIME: ‘HH:MM:SS’

(1) 범위: -838:59:59 ~ 838:59:59

(2) 예: ’14:30:03.5’는 오후 2시 30분 3.5초를 나타낸다

3) DATETIME: ‘YYYY-MM-DD HH:MM:SS’

(1) 범위: 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

4) YEAR: ‘YYYY’

(1) 범위: 1901 ~ 2155 또는 0000(불법 연도 값은 0000으로 변환된다)

 

9. SQLx 데이터 유형 - (5) 

1) TIMESTAMP(n): Unix 시간(1970년 1월 1일 이후 시간)

(1) 범위: 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC

(2) 일반적으로 로그 기록(모든 시스템 이벤트의 기록 유지)에 사용된다

(3) 크기 n에 따라 표시 패턴이 변경된다

 

 

10. SQL 데이터 유형 - (6)

1) BINARY(n): 사용자가 지정한 길이 n의 이진 바이트 데이터 타입

(1) 바이트 문자열(문자열이 아닌) 포함

(2) 최대 길이 n = [0, 255]

2) VARBINARY(n): 사용자가 지정한 최대 길이 n의 이진 바이트 데이터 타입

(1) 최대 길이 n = [0, 65,535]

3) BLOB: 이진 대용량 개체 데이터 타입

(1) TINYBLOB : 0 – 255 바이트

(2) BLOB0  : – 65,535 바이트(65 KB)

(3) MEDIUMBLOB 0 : – 16,777,215 바이트(16 MB)

(4) LONGBLOB : 0 – 4,294,967,295 바이트(4 GB)

 

CREATE TABLE Construct

1. 새로운 관계는 CREATE TABLE 명령어를 사용하여 정의된다:

CREATE TABLE r(
  A1 D1, A2 D2, …, An Dn,
  (무결성 제약 조건1),
  …,
  (무결성 제약 조건k)
)

- r은 관계의 이름이다

- 각 Ai는 관계 r의 스키마에서 속성 이름이다

- 각 Di는 속성 Ai의 도메인 내 값의 데이터 유형이다

 

2. 예시

CREATE TABLE instructor(
  ID CHAR(5),
  name VARCHAR(20),
  dept_name VARCHAR(20),
  salary NUMERIC(8,2)
)

 

Integrity Constraints in CREATE TABLE

1. SQL은 무결성 제약 조건을 위반하는 데이터베이스 업데이트를 방지한다

- 무결성 제약 조건을 통해 우리에게 의미 있는 데이터를 지정할 수 있다

 

2. 무결성 제약 조건의 종류

- 기본 키: PRIMARY KEY (A1, ..., An)

- 외래 키: FOREIGN KEY (Am, ..., An) REFERENCES r

- 유니크 키: UNIQUE

- 널이 아님: NOT NULL

- 값 제약 조건 : CHECK (제약 조건), DEFAULT

 

3. 예시:

CREATE TABLE instructor(
  ID CHAR(5),
  name VARCHAR(20) NOT NULL,
  dept_name VARCHAR(20),
  salary NUMERIC(8, 2),
  PRIMARY KEY (ID),
  FOREIGN KEY (dept_name) REFERENCES department
);

 

Declaring KEY AN UNIQUE Constraints

1. 속성 또는 속성 목록은 PRIMARY KEY 또는 UNIQUE로 선언될 수 있다

1) 의미: 관계의 두 튜플이 목록의 모든 속성에서 일치하지 않도록 한다

(1) 즉, 속성은 값의 중복을 허용하지 않는다

(2) PRIMARY KEY/UNIQUE는 각 행의 식별자로 사용될 수 있다

2) 비교: PRIMARY KEY vs UNIQUE

PRIMARY KEY (기본키) UNIQUE (고유)
각 관계(relation)의 행을 고유하게 식별하는데 사용됨 행을 고유하게 결정하지만 기본키가 아님
NULL 값을 허용하지 않음  NULL 값을 허용함 (일부 DBMS는 하나의 NULL 값만 허용)
관계는 오직 하나의 기본키만 가질 수 있음 관계는 둘 이상의 고유 속성을 가질 수 있음
클러스터형 인덱스 비클러스터형 인덱스



2. 예시 

-- 학생 정보를 저장하는 테이블
CREATE TABLE student (
  ID VARCHAR(5),  -- 학생의 고유 ID
  name VARCHAR(20) NOT NULL,  -- 학생 이름 (NULL 불가)
  dept_name VARCHAR(20),  -- 학과 이름
  tot_cred NUMERIC(3,0),  -- 총 학점
  PRIMARY KEY (ID),  -- ID를 기본 키로 설정
  FOREIGN KEY (dept_name) REFERENCES department  -- 학과 이름을 department 테이블의 기본 키와 연결
);

 

CREATE TABLE student (
  ID VARCHAR(5) PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  dept_name VARCHAR(20),
  tot_cred NUMERIC(3,0),
  FOREIGN KEY (dept_name) REFERENCES department
);
CREATE TABLE takes (
  ID VARCHAR(5),
  course_id VARCHAR(8),
  sec_id VARCHAR(8),
  semester VARCHAR(6),
  year NUMERIC(4,0),
  grade VARCHAR(2),
  PRIMARY KEY (ID, course_id, sec_id, semester, year),
  FOREIGN KEY (ID) REFERENCES student,
  FOREIGN KEY (course_id, sec_id, semester, year) REFERENCES section
);
CREATE TABLE course (
  course_id VARCHAR(8),
  title VARCHAR(50),
  dept_name VARCHAR(20),
  credits NUMERIC(2,0),
  PRIMARY KEY (course_id),
  FOREIGN KEY (dept_name) REFERENCES department
);
CREATE TABLE course (
  course_id VARCHAR(8),
  title VARCHAR(50),
  dept_name VARCHAR(20) DEFAULT ‘Comp. Sci’,
  credits NUMERIC(2,0),
  PRIMARY KEY (course_id),
  FOREIGN KEY (dept_name) REFERENCES department
);

 

(1) NOT NULL을 적용하지 않은 예시

CREATE TABLE neighbors(
  name CHAR(30) PRIMARY KEY,
  addr CHAR(50) DEFAULT ‘123 Sesame St.’,
  phone CHAR(16)
);

-- 엘모를 이웃으로 추가:
INSERT INTO neighbors (name) VALUES (‘Elmo’);

 

name addr phone
'Elmo' '123 Sesame Street.' NULL

 

(2) NOT NULL을 적용한 예시

CREATE TABLE neighbors(
  name CHAR(30) PRIMARY KEY,
  addr CHAR(50) DEFAULT ‘123 Sesame St.’,
  phone CHAR(16) NOT NULL
);

-- 엘모를 이웃으로 추가:
INSERT INTO neighbors (name) VALUES (‘Elmo’);

 

- 만약 phone이 NOT NULL이라면, 이 삽입은 거부되었을 것이다

 


 

Table Updates (Updating Tuples)

1. INSERT

INSERT INTO instructor VALUES (‘10211’, ‘Smith’, 'Biology', 66000);

 

2. DELETE

-- 학생 관계에서 모든 튜플을 제거한다.
DELETE FROM student

 

Table Updates (Updating Table Schemas)

 

1. DROP TABLE

-- 관계 r를 제거한다
DROP TABLE r

 

2. ALTER

ALTER TABLE r ADD A D

1) A는 관계 r에 추가할 새로운 속성의 이름이며, D는 A의 도메인이다

2) 기존의 모든 튜플은 새로운 속성에 대해 null 값을 할당받는다

ALTER TABLE r DROP A

1) A는 r의 속성 이름이다

2) 많은 데이터베이스에서 속성을 제거하는 기능은 지원되지 않지만(MySQL은 지원함)

 

3. 예시

DROP TABLE time_slot_backup;
ALTER TABLE time_slot_backup ADD remark VARCHAR(20);
ALTER TABLE time_slot_backup DROP remark;

 

1) DROP a column

ALTER TABLE instructor
DROP COLUMN salary;

  • 이 명령어는 instructor 테이블에서 salary라는 열(컬럼)을 삭제한다. 해당 열에 저장된 모든 데이터도 함께 삭제된다.

2) DROP a PRIMARY KEY Constraint

ALTER TABLE instructor
DROP PRIMARY KEY;

  • 이 명령어는 instructor 테이블에서 기본 키 제약 조건을 삭제한다. 기본 키가 제거되면 해당 열은 더 이상 고유성을 보장하지 않으며 NULL 값을 허용할 수 있다.

3) DROP a FOREIGN KEY Constraint

ALTER TABLE instructor
DROP FOREIGN KEY instructor_ibfk_1;

  • 이 명령어는 instructor 테이블에서 외래 키 제약 조건인 instructor_ibfk_1을 삭제한다. 외래 키 제약 조건이 제거되면, 해당 열은 참조 무결성 검사를 하지 않게 된다.

4) DROP DEFAULT

ALTER TABLE student
ALTER tot_cred DROP DEFAULT;

  • 이 명령어는 student 테이블에서 tot_cred 열의 기본값을 삭제한다. 이후에는 tot_cred 열에 값을 입력하지 않으면 NULL로 저장된다.

5) DROP a database

DROP DATABASE university;
  • 이 명령어는 university 데이터베이스를 삭제한다.

 

EOF

- 다음 내용: 데이터베이스 설계

728x90

'🏫 한동대학교 > Database' 카테고리의 다른 글

DB08 - Normalization  (0) 2025.04.17
DB07 - ER model  (0) 2025.04.07
DB05 - More SQL  (0) 2025.02.15
DB04 - SQL  (0) 2025.02.15
DB03 - mysql  (0) 2025.02.15
'🏫 한동대학교/Database' 카테고리의 다른 글
  • DB08 - Normalization
  • DB07 - ER model
  • DB05 - More SQL
  • DB04 - SQL
pangil_kim
pangil_kim
기록을 통해 지속적인 성장을 추구합니다.
    250x250
  • pangil_kim
    멈추지 않는 기록
    pangil_kim
  • 전체
    오늘
    어제
  • 📝 글쓰기
      ⚙️ 관리

    • 분류 전체보기 (321) N
      • 💻 개발 (130) N
        • ※ 참고 지식 (7)
        • 📀 MySQL (24)
        • 🌸 Spring Boot (5)
        • 🟩 Node.js (7)
        • 🦕 React (6)
        • 🎩 Next.js (25)
        • 📘 TypeScript (4)
        • 🌈 CSS (4)
        • 🌀 Dart (2)
        • 🧑🏻‍💻 코테 (25)
        • 🕸️ 알고리즘 (4)
        • 🩵 Flutter (9)
        • 📒 JavaScript (6) N
        • 🗒️ 정보처리기사 -실기 (1)
        • 🔸Git (1)
      • 📽️ 프로젝트 (5)
        • 캡스톤디자인2 (5)
      • ✍🏻 회고 (12)
        • 우테코 (4)
      • 📰 정보 공유 (12)
      • 🏫 한동대학교 (155) N
        • Database (15)
        • Software Engineering (18)
        • EAP (22)
        • 일반화학 (26)
        • 25-1 수업 정리 (19)
        • Computer Networking (36)
        • OPIc (2)
        • 클라우드 컴퓨팅 (4)
        • 미술의 이해 (13) N
  • 최근 글

  • 인기 글

  • 태그

    computer networks and the internet
    QT
    찬양
    데이터베이스
    프론트엔드
    typeScript
    컴네
    고윤민교수님
    날솟샘
    FE
    예배
    묵상
    Database
    유태준교수님
    GLS
    SQL
    날마다 솟는 샘물
    CHEMISTRY
    어노인팅
    전산전자공학부
    일반화학
    csee
    설교
    주일
    화학
    네트워킹
    CCM
    웹개발
    한동대학교
    글로벌리더십학부
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
pangil_kim
DB06 - SQL DDL
상단으로

티스토리툴바