CREATE TABLE AS SELECT

- city 테이블과 똑같은 city2 테이블 생성

CREATE TABLE city2
AS SELECT *
FROM city;

CREATE DATABASE

- 새로운 데이터베이스를 생성

- USE문으로 새 데이터베이스를 사용

- Navigator, Schemas에서 마우스 우클릭 'Refresh All' → 만든 데이터베이스가 보임 

CREATE DATABASE suan;

USE suan;

CREATE TABLE

- GUI로 만들수 있음

- 코드로 만들기

CREATE TABLE test2 (
    id INT NOT NULL PRIMARY KEY,
    col1 INT NULL,
    col2 FLOAT NULL,
    col3 VARCHAR(45) NULL
);

ALTER TABLE

- ALTER TABLE문과 함께 ADD문을 사용하면, 테이블에 컬럼을 추가할 수 있음

ALTER TABLE test2
ADD col4 INT NULL;

- ALTER TABLE문과 함게 MODIFY문을 사용하면, 테이블의 컬럼 타입을 변경할 수 있음

ALTER TABLE test2
MODIFY col4 VARCHAR(20) NULL;

- ALTER TABLE문과 함께 DROP문을 사용하면, 테이블에 컬럼을 제거할 수 있음

ALTER TABLE test2
DROP col4;

인덱스

- 테이블에서 원하는 데이터를 빠르게 찾기 위해 사용

- 일반적으로 데이터를 검색할 때 순서대로 테이블 전체를 검색하므로 데이터가 많으면 많을수록 탐색하는 시간이 늘어남.하지만 인덱스를 사용할 경우 검색과 질의를 할 때 테이블 전체를 읽지 않기 때문에 빠름

- 설정된 컬럼 값을 포함한 데이터의 삽입, 삭제, 수정 작업이 원본 테이블에서 이루어질 경우, 인덱스도 함께 수정되어야 함. 그래서 인덱스가 있는 테이블은 처리 속도가 느려질 수 있으므로 수정보다는 검색이 자주 사용되는 테이블에서 사용하는 것이 좋음

 

CREATE INDEX

CREATE INDEX문을 사용하여 인덱스를 생성

CREATE INDEX Col1idx
ON test (col1);

SHOW INDEX

인덱스 정보 보기

SHOW INDEX FROM test;

CREATE UNIQUE INDEX

중복 값을 허용하지 않는 인덱스를 생성

CREATE UNIQUE INDEX Col2idx
ON test (col2);

FULLTEXT INDEX

일반적인 인덱스와는 달리 매우 빠르게 테이블의 모든 텍스트 컬럼을 검색

ALTER TABLE test
ADD FULLTEXT Col3idx(col3);

INDEX 삭제

- ALTER: ALTER 문을 사용하여 테이블에 추가된 인덱스 삭제

ALTER TABLE test
DROP INDEX Col3idx;

- DROP INDEX: DROP 문을 사용하여 해당 테이블에서 명시된 인덱스를 삭제

DROP INDEX Col2idx ON test;

- 둘 중 하나 사용


VIEW

- 뷰는 데이터베이스에 존재하는 일종의 가상 테이블

- 실제 테이블처럼 행과 열을 가지고 있지만, 실제로 데이터를 저장하진 않음

- MySQL에서 뷰는 다른 테이블이나 다른 뷰에 저장되어 있는 데이터를 보여주는 역할만 수행

- 뷰를 사용하면 여러 테이블이나 뷰를 하나의 테이블처럼 볼 수 있음

- 장점

1) 특정 사용자에게 테이블 전체가 아닌 필요한 컬럼만 보여줄 수 있음

2) 복잡한 쿼리를 단순화해서 사용

3) 쿼리 재사용 가능

- 단점

1) 한 번 정의된 뷰는 변경할 수 없음

2) 삽입, 삭제, 갱신 작업에 많은 제한 사항을 가짐

3) 자신만의 인덱스를 가질 수 없음

 

CREATE VIEW

CREATER VIEW 문을 사용하여 뷰 생성

CREATE VIEW testView AS
SELECT Col1, Col2
FROM test;

SELECT * FROM testView;

ALTER VIEW

ALTER 문을 사용하여 뷰를 수정

ALTER VIEW testView AS
SELECT Col1, Col2, Col3
FROM test;

SELECT * FROM testView;

DROP VIEW

DROP 문을 사용하여 생성된 뷰를 삭제

DROP VIEW testView;

INSERT

- INSERT INTO 문을 사용하여 테이블에 새로운 레코드를 추가할 수 있음

- 문법

1. INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...)

   VALUES (데이터값1, 데이터값2, 데이터값3, ...)

2. INSERT INTO 테이블이름

   VALUES (데이터값1, 데이터값2, 데이터값3, ...)

- 테이블이름 다음에 나오는 열 생략 가능

- 생략할 경우에 VALUES 다음에 나오는 값들의 순서 및 개수가 테이블이 정의된 열 순서 및 개수와 동일해야 함

INSERT INTO test
VALUES(1, 123, 1.1, "Test");

3. Workbench

Workbench에서 바로 입력 후 Apply 

INSERT INTO SELECT

- test 테이블에 있는 내용을 test2 테이블에 삽입(테이블의 데이터를 우리가 복사하고자 하는 대상 테이블로 복사하는 기능을 가진 구문)

INSERT INTO test2 SELECT * FROM test;

UPDATE

- 기존에 입력되어 있는 값을 변경하는 구문

- WHERE절 생략 가능하나 테이블의 전체 행의 내용 변경

UPDATE test
SET col1 = 1, col2 = 1.0, col3 = 'test'
WHERE id = 1;

DELETE

- 행 단위로 데이터 삭제하는 구문

- DELETE FROM 테이블이름 WHERE 조건;

- WHERE절을 안쓰면 전체 다 날라

- 데이터는 지워지지만 테이블 용량은 줄어들지 않음

- 원하는 데이터만 지울 수 있음

- 삭제 후 잘못 삭제한 것을 되돌릴 수 있음

DELETE FROM test
WHERE id = 1;

TRUNCATE

- 용량이 줄어들고, 인덱스 등도 모두 삭제

- 테이블은 삭제하지는 않고, 데이터만 삭제(테이블의 데이터를 전부 삭제하고 사용하고 있던 공간을 반납)

- 삭제 후 절대 되돌릴 수 없음

TRUNCATE TABLE test;

DROP TABLE

- 테이블 자체를 삭제

- 삭제 후 절대 되돌릴 수 없음

DROP TABLE test;

DROP DATABASE

- DROP DATABASE 문은 해당 데이터베이스를 삭제

DROP DATABASE suan;

 

 

Reference)

유튜브 '이수안컴퓨터연구소 MySQL 데이터베이스 한번에 끝내기'

유튜브 '코딩애플 index'

'SQL' 카테고리의 다른 글

MySQL(2)  (0) 2023.05.19
MySQL(1)  (0) 2023.05.18
DDL, DML, DCL  (0) 2023.05.18

MySQL 내장함수

- 사용자의 편의를 위해 다양한 기능의 내장 함수를 미리 정의하여 제공

- 대표적인 내장 함수의 종류

문자열 함수, 수학 함수, 날짜와 시간 함수

- 실습은 특정 숫자나 문자를 넣었지만, 분석을 할때는 해당 자리에 본인이 알고자 하는 컬럼들을 넣음

SELECT LENGTH(Name)
FROM city;

 

LENGTH()

- 전달받은 문자열의 길이를 반환

SELECT LENGTH('123456789');

CONCAT()

- 전달받은 문자열을 모두 결합하여 하나의 문자열로 반환

- 전달받은 문자열 중 하나라도 NULL이 존재하면 NULL을 반환

SELECT CONCAT('My', 'sql Op', 'en Source');

LOCATE()

- SELECT LOCATE(substr, str, [pos]);

- 문자열 내에서 찾는 문자열이 처음으로 나타나는 위치를 찾아서 해당 위치를 반환

- 찾는 문자열이 문자열 내에 존재하지 않으면 0을 반환

- python과 달리 MySQL에서는 문자열의 시작 인덱스를 1부터 계산(python은 인덱스를 매길 때 0부터 시작하지만, MySQL은 1부터 시작)

- pos는 선택적으로 넣을수 있는 값인데, 해당 인자에 값을 주게 되면 해당 인자의 위치에서 부터 검색을 시작

SELECT LOCATE('abc', 'abababcbacdABCDabcAB');
>> 5

SELECT LOCATE('abc', 'abababcbacdABCDabcAB', 7);
>> 12
# 소문자와 대문자 구분없는듯

LEFT(), RIGHT()

- LEFT(): 문자열의 왼쪽부터 지정한 개수만큼의 문자를 반환

- RIGHT(): 문자열의 오른쪽부터 지정한 개수만큼의 문자를 반환

SELECT LEFT('MySQL is database management system', 5);
>> MySQL
SELECT RIGHT('MySQL is database management system', 6);
>> system

LOWER(), UPPER()

- LOWER(): 문자열의 문자를 모두 소문자로 변경

- UPPER(): 문자열의 문자를 모두 대문자로 변경

SELECT LOWER('MySQL is database management system');
>> mysql is database management system
SELECT UPPER('MySQL is database management system');
>> MYSQL IS DATABASE MANAGEMENT SYSTEM

REPLACE()

- 문자열에서 특정 문자열을 대체 문자열로 교체

SELECT REPLACE('MSSQL', 'MS', 'My');
>> MySQL

TRIM()

- 문자열의 앞이나 뒤, 또는 양쪽 모두에 있는 특정 문자를 제거

- TRIM() 함수에서 사용할 수 있는 지정자

BOTH: 전달받은 문자열의 양 끝에 존재하는 특정 문자를 제거(기본 설정)

LEADING: 전달받은 문자열 앞에 존재하는 특정 문자를 제거

TRAILING: 전달받은 문자열 뒤에 존재하는 특정 문자를 제거

- 제거할 문자를 명시하지 않으면, 자동으로 공백을 제거

SELECT TRIM('    MySQL    '),
TRIM(LEADING '#' FROM '###MySQL##'),
TRIM(TRAILING '#' FROM '###MySQL##');
>> MySQL, MySQL##, ###MySQL

FORMAT()

- 숫자 타입의 데이터를 세 자리마다 쉼표(,)를 사용하는 '#,###,###.##' 형식으로 변환

- 반환되는 데이터의 형식은 문자열 타입

- 두 번째 인수는 반올림할 소수 부분의 자릿수

SELECT FORMAT(123123123123.123123123, 4);
>> 123,123,123,123.1231

FLOOR(), CEIL(), ROUND()

- FLOOR(): 내림

- CEIL(): 올림

- ROUND(): 반올림(반올림 기준 정할수 있음: 지정하지 않을 경우 소수점 첫번째 자리를 사용, '소수점 몇번째 자리까지 나타냄 → 지정한 자리수 뒤에 숫자를 보고 반올림 처리')

SELECT FLOOR(21.35);
>> 21
SELECT CEIL(21.35);
>> 22
SELECT ROUND(10.349);
>> 10
SELECT ROUND(10.349, 1);
>> 10.3

SQRT(), POW(), EXP(), LOG()

- SQRT(): 양의 제곱근

- POW(): 첫 번째 인수로는 밑수를 전달하고, 두 번째 인수로는 지수를 전달하여 거듭제곱 계산

- EXP(): 인수로 지수를 전달받아, e의 거듭제곱을 계산

- LOG(): 자연로그 값을 계산

SELECT SQRT(4), POW(2,3), EXP(3), LOG(3);

SIN(), COS(), TAN()

- SIN(): 사인값 반환

- COS(): 코사인값 반환

- TAN(): 탄젠트값 반환

SELECT SIN(PI()/2), COS(PI()), TAN(PI()/4);
>> 1, -1, 0.99999999999999

ABS(), RAND()

- ABS(): 절대값을 반환

- RAND(): 0.0보다 크거나 같고 1.0보다 작은 하나의 실수를 무작위로 생성(매 실행마다 달라짐)

- RAND(시드번호): 시드번호를 부여하면 매 실행마다 동일한 결과

SELECT ABS(-3), RAND(1), ROUND(RAND(1)*100, 0);
>> 3, 40.54035371219772, 41

NOW(), CURDATE(), CURTIME()

- NOW(): 현재 날짜와 시간을 반환, 반환되는 값은 'YYYY-MM-DD HH:MM:SS' 또는 YYYYMMDDHHMMSS 형태로 반환

- CURDATE(): 현재 날짜를 반환, 이때 반환되는 값은 'YYYY-MM-DD' 또는 YYYYMMDD 형태로 반환

- CURTIME(): 현재 시각을 반환, 이때 반환되는 값은 'HH:MM:SS' 또는 HHMMSS 형태로 반환

SELECT NOW();
SELECT CURDATE();
SELECT CURTIME();

DATE(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND()

- DATE(): 전달받은 값에 해당하는 날짜 정보를 반환

- MONTH(): 월에 해당하는 값을 반환하며, 0부터 12 사이의 값을 가짐

- DAY(): 일에 해당하는 값을 반환하며, 0부터 31 사이의 값을 가짐

- HOUR(): 시간에 해당하는 값을 반환하며, 0부터 23 사이의 값을 가짐

- MINUTE(): 분에 해당하는 값을 반환하며, 0부터 59 사이의 값을 가짐

- SECONDE(): 초에 해당하는 값을 반환하며, 0부터 59 사이의 값을 가짐

SELECT
NOW(),
DATE(NOW()),
MONTH(NOW()),
DAY(NOW()),
HOUR(NOW()),
MINUTE(NOW()),
SECOND(NOW());

MONTHNAME(), DAYNAME()

- MONTHNAME(): 월에 해당하는 이름을 반환

- DAYNAME(): 요일에 해당하는 이름을 반환

SELECT
NOW(),
MONTHNAME(NOW()),
DAYNAME(NOW());

DAYOFWEEK(), DAYOFMONTH(), DAYOFYEAR()

- DAYOFWEEK(): 일자가 해당 주에서 몇 번째 날인지를 반환, 1부터 7 사이의 값을 반환(일요일=1, 토요일=7)

                             요일에 해당하는 정수를 반환

- DAYOFMONTH(): 일자가 해당 월에서 몇 번째 날인지를 반환, 0부터 31 사이의 값을 반환

- DAYOFYEAR(): 일자가 해당 연도에서 몇 번째 날인지를 반환, 1부터 366사이의 값을 반환

SELECT
DAYOFMONTH('2023-05-01'),
DAYOFWEEK('2023-05-01'),
DAYOFYEAR('2023-05-01');

DATE_FORMAT()

- DATE_FORMAT(날짜 , 형식)

- 전달받은 형식에 맞춰 날짜와 시간 정보를 문자열로 반환(날짜를 지정한 형식으로 출력)

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
>> 2023-05-20

- https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html

 

 

 

 

 

Reference)

유튜브 '이수안컴퓨터연구소 MySQL 데이터베이스 한번에 끝내기'

'SQL' 카테고리의 다른 글

MySQL(3)  (0) 2023.05.21
MySQL(1)  (0) 2023.05.18
DDL, DML, DCL  (0) 2023.05.18

SHOW DATABASES

현재 서버에 어떤 DB가 있는지 보기

 

USE

  • 사용할 데이터베이스 지정
  • 지정해 놓은 후 특별히 다시 USE문 사용하거나 다른 DB를 사용하겠다고 명시하지 않는 이상 모든 SQL문은 지정 DB에서 수행
USE database_name;
  • Workbench에서 직접 선택해 사용 가능

[Navigator] → [SCHEMAS] → 데이터베이스 선택

 

SHOW TABLES

  • 지정한 데이터베이스의 테이블 이름 보기

SHOW TABLE STATUS

  • 지정한 데이터베이스의 테이블 정보 조회(row 개수 등등 정보를 보여줌)

DESCRIBE(DESC)

  • 해당 테이블에 무슨 컬럼이 있는지 확인
DESCRIBE city;
DESC city;

SELECT

  • <SELECT... FROM>
  • 요구하는 데이터를 가져오는 구문
  • 일반적으로 가장 많이 사용되는 구문
  • 데이터베이스 내 테이블에서 원하는 정보를 추출
  • SELECT 구문 형식
SELECT select_expr
               [FROM table_references]
               [WHERE where_condition]
               [GROUP BY {col_name | expr | position}]
               [HAVING where_condition]
               [ORDER BY {col_name | expr | position}]

SELECT *

해당 테이블의 전체 데이터들을 보여줌(모든 열)

SELECT *
FROM city;

 

SELECT 열 이름

  • 테이블에서 필요로 하는 열만 가져옴
  • 여러 개의 열을 가져오고 싶을 때는 콤마로 구분
  • 열 이름의 순서는 출력하고 싶은 순서대로 배열 가능
SELECT Name, Population
FROM city;

SELECT FROM WHERE

  • 조회하는 결과에 특정한 조건으로 원하는 데이터만 보고 싶을 때 사용
  • SELECT 필드이름 FROM 테이블이름 WHERE 조건식;
SELECT *
FROM city
WHERE Population >= 8000000;
  • 연산자의 사용

- 조건 연산자(=, <, >, <=, >=, <>, != 등)

- 관계 연산자(AND, OR, NOT 등)

- 연산자의 조합으로 데이터를 효율적으로 추출

SELECT *
FROM city
WHERE Population > 7000000 AND Population < 8000000;
  • BETWEEN

데이터가 숫자로 구성되어 있어 연속적인 범위를 지정할 때 BETWEEN...AND 사용 가능(이상, 이하의 결과를 추출)

SELECT *
FROM city
WHERE Population BETWEEN 7000000 AND 8000000;

# 동일한 결과(AND 연산자 사용)
SELECT *
FROM city
WHERE Poulation >= 7000000 AND Population <= 8000000;

# 위 검색내용과 반대되는 조건문
SELECT *
FROM city
WHERE Population NOT BETWEEN 7000000 AND 8000000;
  • IN

이산적인 값의 조건에서는 IN()사용 가능(IN안에 들어가는 값에 맞는 결과 추출)

SELECT *
FROM city
WHERE Name IN('Seoul', 'New York', 'Tokyo');

# 마찬가지로 NOT 이용 가능(반대되는 조건문)
  • LIKE

-  문자열의 내용 검색하기 위해 LIKE 연산자 사용(부분적으로 일치하는 데이터를 찾을때 사용)

-  _: 글자숫자를 정해줌(EX 컬럼명 LIKE '홍_동'), 한 글자와 매치

-  %: 글자숫자를 정해주지않음(EX 컬럼명 LIKE '홍%'), 모든 글자와 매치

# A로 시작하는 문자를 찾기
SELECT 컬럼명
FROM 테이블
WHERE 컬럼명 LIKE 'A%';

# A로 끝나는 문자 찾기
SELECT 컬럼명
FROM 테이블
WHERE 컬럼명 LIKE '%A';

# A를 포함하는 문자 찾기
SELECT 컬럼명
FROM 테이블
WHERE 컬럼명 LIKE '%A%';

# A로 시작하는 두 글자 문자 찾기
SELECT 컬럼명
FROM 테이블
WHERE 컬럼명 LIKE 'A_';

# 첫 번째 문자가 'A'가 아닌 모든 문자열 찾기
SELECT 컬럼명
FROM 테이블
WHERE 컬럼명 LIKE '[^A]';

# 첫 번째 문자가 'A' 또는 'B' 또는 'C'인 문자열 찾기
SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '[ABC]';
SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '[A-C]';
  • Sub Query(서브 쿼리)

- 쿼리문 안에 또 쿼리문이 들어 있는 것

- 서브 쿼리의 결과가 둘 이상이 되면 에러 발생

- 서브쿼리를 쓰는 이유는 알려지지 않은 기준을 이용한 검색을 하기 위해서

SELECT *
FROM city
WHERE CountryCode = (    SELECT CountryCode
                                             FROM city
                                             WHERE Name = 'Seoul'    );

서브 쿼리만 실행하면 city 테이블에서 Name이 'Seoul'인 CountryCode가 출력되고('KOR') 메인 쿼리와 매칭시켜 결과 출력

# 서브 쿼리의 결과가 둘 이상이 되면 에러 발생
SELECT *
FROM city
WHERE CountryCode = (    SELECT CountryCode
                                             FROM city
                                             WHERE Name IN('Seoul', 'Kabul')    );
  • ANY(서브쿼리 안의 값이 여러개일때)

- 서브쿼리의 여러 개의 결과 중 한 가지만 만족해도 가능(하나의 조건만 만족하면 True)

- SOME은 ANY와 동일한 의미로 사용

SELECT *
FROM city
WHERE Population > ANY(    SELECT Population
                                                FROM city
                                                WHERE District = 'New York'    );
#
> ANY : 최소값보다 크면
>= ANY : 최소값보다 크거나 같으면
< ANY : 최대값보다 작으면
<= ANY : 최대값보다 작거나 같으면
= ANY : IN과 같은 기능
!= ANY : NOT IN과 같은 기능
  • ALL(서브쿼리 안의 값이 여러개일때)

- 서브쿼리의 여러 개의 결과를 모두 만족시켜야 함(모든 값이 조건 만족하면 True)

SELECT *
FROM city
WHERE Population > ALL(    SELECT Population
                                               FROM city
                                               WHERE District = 'New York'    );
#
> ALL : 최대값보다 크면
>= ALL : 최대값보다 크거나 같으면
< ALL : 최소값보다 작으면
<= ALL : 최소값보다 작거나 같으면
= ALL : 서브 쿼리의 결과가 1건이면 괜찮지만 여러 건이면 오류가 발생
!= ALL : 서브 쿼리의 결과가 1건이면 괜찮지만 여러 건이면 오류가 발생

ORDER BY

- 결과가 출력되는 순서를 조절하는 구문

- default는 ASC(오름차순)으로 생략 가능

- 내림차순 정렬(열 이름 뒤에 DESC 적어줄 것)

SELECT *
FROM city
ORDER BY Population DESC;

- 혼합해 사용하는 구문도 가능

SELECT *
FROM city
ORDER BY CountryCode ASC, Population DESC;
# CountryCode 컬럼을 오름차순으로 정렬 후, Population 컬럼을 내림차순 정렬

DISTINCT

- 중복된 것은 1개씩만 보여주면서 출력

- 테이블의 크기가 클수록 효율적

SELECT DISTINCT CountryCode
FROM city;

LIMIT

- 출력 개수를 제한

- 상위의 N개만 출력하는 'LIMIT N' 구문

- 서버의 처리량을 많이 사용해 서버의 전반적인 성능을 나쁘게 하는 악성 쿼리문 개선할 때 사용

- Workbench에서 Limit을 조절하는 옵션이 있음

SELECT *
FROM city
ORDER BY Population DESC
LIMIT 10;

GROUP BY

- 그룹으로 묶어주는 역할(효율적인 데이터 그룹화)

- 집계 함수를 함께 사용

AVG(): 평균

MIN(): 최소값

MAX(): 최대값

COUNT(): 행의 개수

COUNT(DISTINCT): 중복 제외된 행의 개수

STDEV(): 표준편차

VARIANCE(): 분산

- 읽기 좋게 하기 위해 별칭 사용: AS

SELECT CountryCode, AVG(Population) AS 'Average'
FROM city
GROUP BY CountryCode;

Question: 도시는 몇개인가?, 도시들의 평균 인구수는?

SELECT COUNT(*)
FROM city;

SELECT AVG(Population)
FROM city;

HAVING

- WHERE과 비슷한 개념으로 조건 제한

- 집계 함수에 대해서 조건 제한하는 편리한 개념

- HAVING절은 반드시 GROUP BY절 다음에 나와야 함

SELECT CountryCode, MAX(Population)
FROM city
GROUP BY CountryCode
HAVING MAX(Population) > 8000000;

ROLLUP

- 총합 또는 중간합계가 필요할 경우 사용

- GROUP BY절과 함께 WITH ROLLUP문 사용

SELECT CountryCode, Name, SUM(Population)
FROM city
GROUP BY CountryCode, Name WITH ROLLUP;

JOIN

- 데이터베이스 내의 여러 테이블을 하나의 테이블이나 결과 집합으로 결합

- python에서 데이터프레임을 결합하는 merge와 비슷

SELECT *
FROM city
JOIN country ON city.CountryCode = country.Code;

Question: city, country, countrylanguage 테이블 3개를 JOIN 하기

SELECT *
FROM city
JOIN country ON city.CountryCode = country.Code
JOIN countrylanguage ON city.CountryCode = countrylanguage.CountryCode;

 

 

Reference)

유튜브 '이수안컴퓨터연구소 MySQL 데이터베이스 한번에 끝내기'

'SQL' 카테고리의 다른 글

MySQL(3)  (0) 2023.05.21
MySQL(2)  (0) 2023.05.19
DDL, DML, DCL  (0) 2023.05.18

DDL(Data Definition Language, 데이터 정의어)

데이터베이스를 정의하는 언어이며, 데이터를 생성, 수정, 삭제하는 등 데이터의 전체 골격을 결정하는 역할의 언어이다.

  • CREATE: 데이터베이스, 테이블 등을 생성하는 역할
  • ALTER: 테이블을 수정하는 역할
  • DROP: 데이터베이스, 테이블을 삭제하는 역할
  • TRUNCATE: 테이블을 초기화 시키는 역할

DML(Data Manipulation Language, 데이터 조작어)

정의된 데이터베이스에 입력된 레코드를 조회하거나 수정하거나 삭제하는 등의 역할을 하는 언어

(쉽게 말해, 테이블에 있는 행과 열을 조작하는 언어라고 생각)

→ 데이터베이스 사용자가 질의어를 통해 저장된 데이터를 실질적으로 처리하는데 사용하는 언어

  • SELECT: 데이터를 조회하는 역할
  • INSERT: 데이터를 삽입하는 역할
  • UPDATE: 데이터를 수정하는 역할
  • DELETE: 데이터를 삭제하는 역할

DCL(Data Control Language, 데이터 제어어)

데이터베이스에 접근하거나 객체에 권한을 주는 등의 역할을 하는 언어

데이터의 보안, 무결성, 회복 등을 정의하는데 사용

  • GRANT: 특정 데이터베이스 사용자에게 특정 작업에 대한 수행권한 부여
  • REVOKE: 특정 데이터베이스 사용자에게 특정 작업에 대한 권한을 박탈, 회수
  • COMMIT: 트랜잭션의 작업이 정상적으로 완료되었음을 관리자에게 알려줌
  • ROLLBACK: 트랜잭션의 작업이 비정상적으로 종료 되었을 때 원래의 상태로 복구

정리를 하자면,

DDL: 데이터베이스와 테이블을 생성 및 변경, 제거

DML: 생성된 테이블 내에 있는 데이터들(행과 열)을 입력, 변경, 수정

DCL: 데이터베이스의 접속 권한 등을 수정

 

 

 

REFERENCE)

https://cbw1030.tistory.com/71

 

'SQL' 카테고리의 다른 글

MySQL(3)  (0) 2023.05.21
MySQL(2)  (0) 2023.05.19
MySQL(1)  (0) 2023.05.18

+ Recent posts