SQL(Structured Query Language)
여러 가지 DBMS에는 쿼리문이 있다.
각 DB마다 쿼리문의 문법이나 특징이 조금씩 달라질 수 있다.
여기서는 MySQL을 사용하여 기본적인 쿼리문을 정리했다.
DDL(Data Defined Language, 데이터 정의어)
DDL은 스키마, 도메인, 테이블, 뷰, 인덱스 등 데이터의 구조를 정의하거나 제거할 수 있는 쿼리문이다.
CREATE
CREATE 쿼리문은 데이터베이스, 사용자 등을 생성해 주는 쿼리문이다.
CREATE DATABASE [데이터베이스_이름];
CREATE USER '사용자_이름'@'주소' IDENTIFIED BY '비밀번호';
예시로 데이터베이스와 test01이라는 사용자를 만들어보았다.
사용자를 생성할 때 @ 뒤에 %를 사용했는데 모든 IP 접근을 허용하겠다는 의미이다. (상황에 따라 변경하면 된다.)
ALTER
ALTER는 변경에 관한 쿼리문이다.
변경이라고 함은 이름을 변경한다던가 혹은 속성을 변경, 타입을 변경을 뜻한다.
ALTER TABLE [테이블_이름] ADD [속성_이름] [타입]
ALTER TABLE [테이블_이름] DROP [속성_이름] [CASCADE]
ALTER TABLE [테이블_이름] RENAME COLUMN [속성_이름] TO [변경_이름]
ALTER TABLE [테이블_이름] MODIFY [속성_이름 타입]
user 테이블이 있다고 가정하고 ALTER를 진행했다.
ADD를 예시로 들면 현재 user 테이블에는 username 컬럼만 존재하지만 ALTER ADD를 통해서 password 컬럼을 추가할 수 있다.
※ CASCADE: 개체를 변경 혹은 삭제할 때 다른 개체가 참조하고 있을 경우 함께 변경 혹은 삭제가 된다.
DROP
DROP 쿼리문은 데이터베이스, 테이블 등을 삭제해주는 명령어이다.
예시로 user 테이블을 DROP하고 확인해 보면 테이블이 지워진 것을 확인할 수 있다.
DML(Data Multipulation Language, 데이터 조작어)
실질적으로 데이터를 조회, 삽입, 삭제, 수정할 때 사용하는 쿼리문이다. (CRUD 기능을 수행)
SELECT
CRUD에서 R의 기능(읽기)을 담당하는 쿼리문이다.
SELECT는 모든 쿼리문 중에서 가장 중요하기 때문에 따로 글을 정리해서 올릴 계획이다.
INSERT
CRUD에서 C의 기능(생성)을 담당하는 쿼리문이다.
INSERT INTO [테이블_명] (속성명, 속성명...) VALUES(값, 값...);
INSERT INTO [테이블_명] VALUES(값, 값...);
INSERT를 통해서 속성명과 그에 맞는 값을 지정해 줄 수 있고, 속성명을 생략하고 값을 지정해줄 수 있다.
이때 값만 지정해 줄 경우 각 속성의 타입과 일치해야 한다.
UPDATE
CRUD에서 U의 기능(수정)을 담당하는 쿼리문이다.
UPDATE [테이블_명] SET [속성_이름] = [값] WHERE [속성_이름] = [값]
UPDATE를 통해서 변경하고 싶은 속성의 값을 변경할 수 있다.
DELETE
CRUD에서 D의 기능(삭제)을 담당하는 쿼리문이다.
DELETE FROM [테이블_명]
DELETE FROM [테이블_명] WHERE [조건]
WHERE 조건을 사용하여 username이 test03인 사람을 삭제하였다.
DELETE를 사용할 때 주의할 점은 조건을 명시하지 않고 테이블 명만 지정해 주면 해당 테이블이 가지고 있는 데이터가 전부 삭제된다는 것을 주의하여 사용해야 한다.
DCL(Data Control Language, 데이터 제어어)
데이터베이스에 접근하고 사용할 수 있도록 권한을 주고 회수하는 쿼리문이다.
GRANT
GRANT [권한_명] ON [DB].[TABLE] TO '계정명'@'호스트';
GRANT [권한_명] ON [DB].[TABLE] TO '계정명'@'호스트' WITH GRANT OPTION;
GRANT 쿼리문을 통해서 사용자에게 권한을 부여할 수 있다.
이때 DB뒤에 테이블에 대한 권한을 부여할 수 있는데 .*이라면 현재 DB에 있는 모든 테이블에 관해서 권한이 적용된다.
또 다른 GRANT 사용법으로는 WITH GRANT OPTION을 통해서 사용자에게 다른 사용자에게 권한을 부여할 수 있는 권한을 줄 수도 있다.
사용자에게 권한을 부여했다면 SHOW GRANTS FOR '계정명'@'호스트'를 통해서 권한이 잘 부여되었는지 확인할 수 있다.
REVOKE
REVOKE [권한_명] ON [DB].[TABLE] FROM '계정명'@'호스트';
REVOKE 쿼리문을 통해서 사용자에게 부여된 권한을 회수할 수 있다.
주의할 점으로는 만약 root에서 A라는 사용자에게 SELECT 권한을 줄 수 있는 권한을 부여하고, A 사용자가 B 사용자에게 SELECT 권한을 부여했다고 가정해 보자.
이때 root에서 A의 권한을 회수하더라도 B의 SELECT 권한은 남아있게 된다.
따라서 권한을 부여하고, 회수할 때는 이러한 점을 고려해서 수행해야 된다.
'DB' 카테고리의 다른 글
데이터베이스 - 인덱스 (0) | 2023.11.10 |
---|---|
MySQL - SELECT (1) | 2023.11.09 |
MySQL (0) | 2023.11.08 |
데이터베이스 - 트랜잭션과 무결성 (2) | 2023.10.28 |
데이터베이스 - ERD와 정규화 (0) | 2023.10.28 |