티스토리 뷰

MySQL

[MySQL] SQL 문법 - DDL, DML, DCL

ljy98 2022. 2. 17. 19:11

1. SQL 소개

2. DBMS 테이블 구조

3. DDL

4. DML

5. DCL


1. SQL 소개

SQL은 Structured Query Language의 약자로, 우리말로 구조화 질의어라고 한다. SQL의 L이 Language의 약자라는 것에서 눈치챘겠지만 SQL도 결국 프로그래밍 언어이다.

 

SQL은 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.

 

[그림 1] SQL 문법 종류

 

SQL 문법의 종류는 크게 세 가지로 구분할 수 있다.

  • 데이터 정의 언어 (DDL : Data Definition Language)
  • 데이터 조작 언어 (DML : Data Manipulation Language)
  • 데이터 제어 언어 (DCL : Data Control Language)

 

 

2. DBMS 테이블 구조

[그림 2] DBMS 테이블 구조

MySQL에서 show databases; 명령어를 입력하면 테이블들이 나온다. 각각의 테이블은 위 그림과 같은 구조로 되어 있다. 엑셀(Excel)을 많이 다뤄 본 사람들은 익숙하게 느껴질 것이다.

 

DBMS의 테이블은 기본적으로 행과 열로 이루어져 있다. 행은 튜플(tuple), 레코드(record)라고 불리기도 하고, 열은 필드(field), 속성(attribute)으로 불리기도 하는데 모두 같은 뜻이다.

 

 

3. DDL

데이터 정의 언어(DDL)는 컴퓨터 사용자 또는 응용 프로그램 소프트웨어가 컴퓨터의 데이터를 정의하는 컴퓨터 언어이다. SQL의 DDL은 관계형 데이터베이스의 구조를 정의한다.

 

DDL은 테이블 자체를 생성하고 삭제하는 역할을 한다고 생각하면 이해하기 쉽다.

 

명령어 의미
CREATE   새로운 데이터베이스 관계 (테이블), 뷰, 인덱스, 저장 프로시저 생성
DROP   이미 존재하는 데이터베이스 관계(테이블), 뷰, 인덱스, 저장 프로시저 제거
ALTER   이미 존재하는 데이터베이스 개체에 대한 변경, RENAME의 역할 담당
TRUNCATE   관계 (테이블)에서 모든 행의 데이터를 전부 삭제

 

[그림 3] CREATE 사용 예시

CREATE 명령어를 사용하여 members라는 이름의 새로운 테이블을 생성하였다. 각 필드에는 num, name, age, gender가 들어가도록 했다. 

 

AUTO_INCREMENT는 직역하면 자동 증감분이라는 뜻으로 디폴트는 1부터 1씩 증가하는 자연수로 나타나고, 이것은 각 레코드들을 구별할 수 있는 식별자 역할을 할 수 있다. 그래서 AUTO_INCREMENT를 사용하는 필드를 PRIMARY KEY로 지정해주는 경우가 많다.

 

desc members; 라는 명령어를 입력하면 각 필드의 이름과 타입, 디폴트 값 등 정보를 알 수 있다. desc는 describe의 약자이다.

 

[그림 4] DROP 사용 예시

하나의 필드를 없애고 싶다면 ALTER TABLE [테이블명] DROP [필드명]; 이라고 명령어를 입력하면 된다.

 

[그림 5] ALTER 사용 예시

새로운 필드를 특정 위치에 생성하고 싶을 때에는 아래와 같이 입력하면 된다.

 

ALTER TABLE [테이블명] ADD [추가할 필드 이름] [추가할 필드 타입] AFTER [추가할 필드 위치];

 

위 그림에서 명령어의 의미는 members라는 테이블에 age라는 이름의 필드를 추가할 것이고, 타입은 int로 지정하여 name이라는 기존의 필드 뒤에 추가하겠다는 것이다.

 

만약 필드 제일 앞에 새로운 필드를 추가하고 싶다면 'AFTER [추가할 필드위치]' 대신에 'FIRST'를 써주면 된다.

 

[그림 6] TRUNCATE 사용 예시

TRUNCATE TABLE [테이블명]; 이라는 명령어를 입력하면 해당 테이블의 모든 레코드가 없어진다. 이 명령어는 DELETE FROM [테이블명]; 과 같다.

 

 

4. DML

데이터 조작 언어(DML)는 데이터베이스 사용자 또는 응용 프로그램 소프트웨어가 컴퓨터 데이터베이스에 대해 데이터 검색, 등록, 삭제, 갱신을 위한 데이터 언어이다.

 

DML은 하나의 테이블 안에서 필드나 레코드를 추가하고, 수정하는 등의 역할을 한다.

 

명령어 의미
SELECT ~ FROM   테이블 내 레코드 검색 (질의)
INSERT INTO   테이블 내 레코드 삽입 (등록)
UPDATE ~ SET   테이블 내 레코드 업데이트 (수정)
DELETE ~ FROM   테이블 내 레코드 삭제

 

[그림 7] SELECT 사용 예시

SELECT * FROM [테이블명]; 이라는 명령어는 해당 테이블에 있는 모든 내용을 보겠다는 뜻이다. *는 all의 의미이다.

SELECT [필드명] FROM [테이블명]; 은 해당 테이블의 해당 필드에 대한 레코드를 모두 보겠다는 것이다.

 

[그림 8] INSERT 사용 예시

Empty Set인 user 테이블에 INSERT문을 이용해서 레코드를 추가하였다. idx는 디폴트로 AUTO_INCREMENT 값이 들어가고, date는 디폴트로 CURRENT_TIMESTAMP가 들어가기 때문에 INSERT문에는 따로 적지 않았다.

 

CURRENT_TIMESTAMP는 현재의 날짜 및 시간을 넣겠다는 뜻이다.

 

[그림 9] UPDATE 사용 예시

UPDATE [테이블명] SET [필드명]='새로운값' WHERE [필드명]='값'; 이라는 명령어를 쓰면 원하는 위치의 필드 값을 바꿀 수 있다.

 

[그림 10] DELETE 사용 예시

DELETE FROM [테이블명] WHERE [필드명]='값'; 이라는 명령어를 입력하면 해당 테이블의 원하는 위치의 레코드를 삭제할 수 있다. WHERE문을 쓰지 않고 'DELETE FROM [테이블명];' 이라고 입력하면 모든 레코드가 삭제되기 때문에 주의해야 한다.

 

 

5. DCL

데이터 제어 언어(DCL)는 데이터베이스에서 데이터에 대한 액세스를 제어하기 위한 데이터베이스 언어이다. 리눅스에서도 chown, chmod와 같은 명령어를 이용해서 사용자나 파일에 대해 권한 설정을 할 수 있듯이 MySQL에서도 마찬가지다.

 

명령어 의미
GRANT   특정 데이터베이스 사용자에게 특정 작업 수행 권한을 부여
REVOKE   특정 데이터베이스 사용자에게 부여한 특정 권한을 박탈

 

$ grant all privileges on *.* to 'jenny'@'%' with grant option;

위와 같이 명령어는 모든 권한을 jenny@%에게 부여하겠다는 의미이다. root 계정만이 볼 수 있는 테이블을 jenny계정도 볼 수 있고, 수정하거나 삭제할 수도 있다.

 

SQL의 GRANT및 REVOKE 명령어로 사용자에 설정할 수 있는 권한은 아래와 같다.

 

권한 의미
CONNECT   데이터베이스 또는 스키마에 연결하는 권한
SELECT   데이터베이스에서 데이터를 검색하는 권한
INSERT   데이터베이스에서 데이터를 등록할 수 있는 권한
UPDATE   데이터베이스의 데이터를 수정할 수 있는 권한
DELETE   데이터베이스의 데이터를 삭제할 수 있는 권한
USAGE   스키마 또는 함수와 같은 데이터베이스 개체를 사용할 수 있는 권한

'MySQL' 카테고리의 다른 글

MySQL 서버 타임존 & 로컬 타임존 설정  (0) 2022.03.30
MySQL 소개 및 설치방법  (0) 2022.02.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함