SQL data definition: 두 판 사이의 차이
편집 요약 없음 |
편집 요약 없음 |
||
| 10번째 줄: | 10번째 줄: | ||
* disk 상에서 각 관계의 physical storage structure | * disk 상에서 각 관계의 physical storage structure | ||
==Basic types for SQL== | |||
SQL 표준은 여러 가지 내장 타입들을 지원하며 다음이 포함된다: | SQL 표준은 여러 가지 내장 타입들을 지원하며 다음이 포함된다: | ||
* char(n): 사용자가 지정한 길이 n을 갖는 고정 길이 문자열 | * char(n): 사용자가 지정한 길이 n을 갖는 고정 길이 문자열 | ||
| 23번째 줄: | 23번째 줄: | ||
각 자료형은 널(null) 값이라 불리는 특수한 값을 포함할 수 있다. 널 값은 존재할 수는 있으나 알려지지 않았거나, 전혀 존재하지 않을 수도 있는 누락된 값을 나타낸다. 또한, char 데이터 타입은 고정 길이 문자열을 저장한다. 예를 들어, 속성 A의 타입이 char(10)이라고 하자. 만약 이 속성에 문자열 "Avi"를 저장하면, 그 문자열은 길이를 10자로 맞추기 위해 7개의 공백이 문자열 뒤에 덧붙여진다. 반면에 속성 B의 타입이 varchar(10)이고, "Avi"를 저장하면, 공백이 덧붙여지지 않는다. 두 개의 char 타입 값을 비교할 때, 길이가 다르다면 짧은 쪽에 자동으로 공백이 덧붙여져 비교 전에 길이가 동일해진다.<ref>char 타입과 varchar 타입을 비교할 경우, 비교 전에 varchar 값에 공백이 덧붙여져 길이를 맞출 것이라고 기대할 수 있지만, 이 작업이 실제로 수행되는지는 데이터베이스 시스템에 따라 다르다. 따라서 varchar를 권장한다.</ref> | 각 자료형은 널(null) 값이라 불리는 특수한 값을 포함할 수 있다. 널 값은 존재할 수는 있으나 알려지지 않았거나, 전혀 존재하지 않을 수도 있는 누락된 값을 나타낸다. 또한, char 데이터 타입은 고정 길이 문자열을 저장한다. 예를 들어, 속성 A의 타입이 char(10)이라고 하자. 만약 이 속성에 문자열 "Avi"를 저장하면, 그 문자열은 길이를 10자로 맞추기 위해 7개의 공백이 문자열 뒤에 덧붙여진다. 반면에 속성 B의 타입이 varchar(10)이고, "Avi"를 저장하면, 공백이 덧붙여지지 않는다. 두 개의 char 타입 값을 비교할 때, 길이가 다르다면 짧은 쪽에 자동으로 공백이 덧붙여져 비교 전에 길이가 동일해진다.<ref>char 타입과 varchar 타입을 비교할 경우, 비교 전에 varchar 값에 공백이 덧붙여져 길이를 맞출 것이라고 기대할 수 있지만, 이 작업이 실제로 수행되는지는 데이터베이스 시스템에 따라 다르다. 따라서 varchar를 권장한다.</ref> | ||
==Basic Schema Definition== | |||
SQL 관계(relation)는 create table 명령어를 사용하여 정의한다. create table 명령의 일반적인 형식은 다음과 같다: | SQL 관계(relation)는 create table 명령어를 사용하여 정의한다. create table 명령의 일반적인 형식은 다음과 같다: | ||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
| 56번째 줄: | 56번째 줄: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Updates to tables== | |||
SQL에서 테이블을 업데이트 하기 위해서는 아래와 같은 명령어들을 사용한다.<br> | SQL에서 테이블을 업데이트 하기 위해서는 아래와 같은 명령어들을 사용한다.<br> | ||
'''Insert''': r 테이블에 새로운 튜플(행)을 추가하는 명령이다. | '''Insert''': r 테이블에 새로운 튜플(행)을 추가하는 명령이다. | ||
2025년 4월 2일 (수) 10:18 기준 최신판
상위 문서: SQL
개요
SQL DDL은 relation들에 대한 정보를 구체화한다. 이때 구체화되는 항목은 아래와 같다:
- 각 관계의 스키마(schema)
- 각 속성(attribute)에 연결된 값들의 자료형
- 무결성 제약 조건(The integrity constraints)
- 각 관계에 대해 유지되는 인덱스들의 집합
- 각 관계에 대한 보안 및 권한 부여 정보
- disk 상에서 각 관계의 physical storage structure
Basic types for SQL
SQL 표준은 여러 가지 내장 타입들을 지원하며 다음이 포함된다:
- char(n): 사용자가 지정한 길이 n을 갖는 고정 길이 문자열
- varchar(n): 사용자가 지정한 최대 길이 n을 갖는 가변 길이 문자열
- int: 정수
- smallint: 작은 정수
- numeric(p, d): 사용자가 지정한 정밀도를 갖는 고정 소수점 숫자
- 이 숫자는 p개의 숫자(부호 포함)로 구성되며, 그 중 d개는 소수점 오른쪽에 위치한다.
- 예를 들어 numeric(3,1)은 44.5는 정확히 저장할 수 있지만, 444.5나 0.32는 이 타입의 필드에 정확히 저장할 수 없다.
- real, double precision: 기계 의존적인 정밀도를 갖는 부동 소수점 및 배정밀도 부동 소수점 숫자
- float(n): 정밀도 n자리 이상을 갖는 부동 소수점 숫자
각 자료형은 널(null) 값이라 불리는 특수한 값을 포함할 수 있다. 널 값은 존재할 수는 있으나 알려지지 않았거나, 전혀 존재하지 않을 수도 있는 누락된 값을 나타낸다. 또한, char 데이터 타입은 고정 길이 문자열을 저장한다. 예를 들어, 속성 A의 타입이 char(10)이라고 하자. 만약 이 속성에 문자열 "Avi"를 저장하면, 그 문자열은 길이를 10자로 맞추기 위해 7개의 공백이 문자열 뒤에 덧붙여진다. 반면에 속성 B의 타입이 varchar(10)이고, "Avi"를 저장하면, 공백이 덧붙여지지 않는다. 두 개의 char 타입 값을 비교할 때, 길이가 다르다면 짧은 쪽에 자동으로 공백이 덧붙여져 비교 전에 길이가 동일해진다.[1]
Basic Schema Definition
SQL 관계(relation)는 create table 명령어를 사용하여 정의한다. create table 명령의 일반적인 형식은 다음과 같다:
create table r (
A1 D1,
A2 D2,
...,
An Dn,
⟨무결성 제약조건1⟩,
...,
⟨무결성 제약조건k⟩
);
위에서 r은 관계의 이름이고, 각 Ai는 관계 r의 스키마의 있는 속성의 이름, Di는 Ai에 대한 도메인(domain)에 해당한다. 또한 SQL 코드 끝의 세미 콜론은 create table 뿐 아니라 많은 다른 SQL 명령어에 대해서도 선택적으로 사용된다.
SQL은 또한 다양한 무결성 제약 조건(integrity constraints)을 지원한다. 이는 아래와 같다:
- primary key (Ap1, Ap2,...Apm): 이는 속성 Ap1, Ap2,...Apm이 해당 관계의 primary key임을 의미한다.
- primary key는 널 값을 가질 수 없고, unique해야 한다. 즉, 두 튜플이 기본 키 속성들에 대해 동일한 값을 가질 수 없다.
- foreign key (Af1, Af2,...,Afn): 이는 속성 Af1, Af2,...,Afn이 해당 관계의 foreign key임을 의미한다.
- 이때, 어느 튜플의 foreign key에 해당하는 값은 다른 관계 s의 primary key 속성들의 값에 존재해야한 한다.
- not null: 속성에 대한 not null 제약 조건은 그 속성에 널 값이 허용되지 않음을 명시한다.
이때 SQL은 무결성 제약 조건을 위반하는 데이터베이스의 갱신은 어떠한 경우에도 허용하지 않는다. 예를 들어, 아래 명령어는 데이터베이스 안에 instructor라는 관계를 생성한다:
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
);
Updates to tables
SQL에서 테이블을 업데이트 하기 위해서는 아래와 같은 명령어들을 사용한다.
Insert: r 테이블에 새로운 튜플(행)을 추가하는 명령이다.
insert into r values (A1, A2,..., An);
Delete: r 테이블에서 모든 튜플을 삭제한다.
delete from r
Drop table: r 테이블을 완전히 삭제하여 스키마는 물론 모든 데이터를 완전히 삭제한다.
drop table r
Alter: 테이블의 구조를 변경한다.
아래는 테이블 r에 새로운 속성 A를 추가하며, D는 해당 속성의 자료형을 의미한다. 또한 이미 존재하는 모든 튜플은 새로 추가된 속성 A에 null 값을 자동으로 가진다.
alter table r add A D
아래는 테이블 r에서 속성 A를 제거한다. 하지만 많은 데이터베이스는 에러의 위험성 때문에 이를 지원하지 않는다.
alter table r drop A
각주
- ↑ char 타입과 varchar 타입을 비교할 경우, 비교 전에 varchar 값에 공백이 덧붙여져 길이를 맞출 것이라고 기대할 수 있지만, 이 작업이 실제로 수행되는지는 데이터베이스 시스템에 따라 다르다. 따라서 varchar를 권장한다.