TiDB의 SQL 살펴보기

TiDB는 MySQL과 호환되며 대부분의 경우 MySQL 문을 직접 사용할 수 있다. 지원되지 않는 기능에 대한 자세한 내용은 MySQL과의 호환성을 참조하여라.

SQL을 실험해 보고 MySQL 쿼리와의 TiDB 호환성을 테스트하려면 TiDB를 설치하지 않고 웹 브라우저에서 직접 실행할 수 있다. 먼저 TiDB 클러스터를 배포한 다음 SQL 문을 실행할 수도 있다.

이 페이지에서는 DDL, DML, CRUD 작업과 같은 기본 TiDB SQL 문에 대해 설명한다. TiDB 문의 전체 목록은 TiDB SQL 구문 다이어그램을 참조하여라.

카테고리

SQL은 함수에 따라 다음 네 가지 유형으로 나눤다.

  • DDL(데이터 정의 언어): 데이터베이스, 테이블, 뷰, 인덱스 등과 같은 데이터베이스 개체를 정의하는데 사용된다.
  • DML(Data Manipulation Language): 응용 프로그램 관련 레코드를 조작하는데 사용된다.
  • DQL(Data Query Language): 조건부 필터링 후 레코드를 쿼리하는데 사용된다.
  • DCL(Data Control Language): 액세스 권한 및 보안 수준을 정의하는데 사용됩된다.

일반적인 DDL 기능은 객체(테이블이나 인덱스 등)의 생성, 수정 및 삭제이다. 해당 명령은 CREATE, ALTERDROP 이다.

데이터베이스 보기, 작성, 삭제

TiDB 데이터베이스는 테이블 및 인덱스와 같은 객체의 컬렉션으로 볼 수 있다.

데이터베이스 목록을 표시하려면 SHOW DATABASES문을 사용한다.

SHOW DATABASES;

mysql이라는 데이터베이스를 사용하려면 다음문을 사용한다.

USE mysql;

데이터베이스의 모든 테이블을 표시하려면, SHOW TABLES문을 사용한다.

SHOW TABLES FROM mysql;

데이터베이스를 작성하려면 다음 CREATE DATABASE문을 사용한다.

CREATE DATABASE db_name [options];

samp_db라는 데이터베이스를 만들려면 다음문을 사용한다.

CREATE DATABASE IF NOT EXISTS samp_db;

데이터베이스가 있을 경우에 오류를 방지하기 위해 IF NOT EXISTS 추가한다.

데이터베이스를 삭제하려면 다음 DROP DATABASE문을 사용한다.

DROP DATABASE samp_db;

테이블 생성, 표시 및 삭제

테이블을 만들려면 CREATE TABLE문을 사용한다.

CREATE TABLE table_name column_name data_type constraint;

예를 들어, 번호, 이름, 생일 등의 필드를 포함하는 person라는 테이블을 생성하려면 다음문을 사용한다.

CREATE TABLE person (
    id INT(11),
    name VARCHAR(255),
    birthday DATE
    );

테이블(DDL)을 생성하는 명령문을 표시하려면 SHOW CREATE문을 사용한다.

SHOW CREATE table person;

테이블을 삭제하려면 DROP TABLE문을 사용한다.

DROP TABLE person;

인덱스 생성, 표시 및 삭제

인덱스는 인덱싱된 열에 대한 쿼리 속도를 높이는데 사용된다. 값이 고유하지 않은 열의 인덱스를 만들려면 다음 CREATE INDEX문을 사용한다.

CREATE INDEX person_id ON person (id);

또는, 다음과 같이 ALTER TABLE문을 사용한다.

ALTER TABLE person ADD INDEX person_id (id);

값이 고유한 열에 고유한 인덱스를 생성하려면, 다음과 같이 CREATE UNIQUE INDEX문을 사용한다.

CREATE UNIQUE INDEX person_unique_id ON person (id);

또는 다음과 같이 ALTER TABLE문을 사용한다.

ALTER TABLE person ADD UNIQUE person_unique_id (id);

테이블의 모든 인덱스를 표시하려면 다음과 같이 SHOW INDEX문을 사용한다.

SHOW INDEX FROM person;

인덱스를 삭제하려면 DROP INDEX 또는 ALTER TABLE문을 사용한다. DROP INDEXALTER TABLE를 중첩할 수도 있다.

DROP INDEX person_id ON person;
ALTER TABLE person DROP INDEX person_unique_id;

데이터 삽입, 업데이트 및 삭제

일반적인 DML 기능은 테이블 레코드를 추가, 수정 및 삭제하는 것이다. 해당 명령은 INSERT, UPDATEDELETE 이다.

테이블에 데이터를 삽입하려면 다음과 같이 INSERT문을 사용한다.

INSERT INTO person VALUES(1,'tom','20170912');

여러 필드의 데이터가 포함된 레코드를 테이블에 삽입하려면 INSERT문을 사용한다.

INSERT INTO person(id,name) VALUES('2','bob');

테이블에 있는 레코드의 일부 필드를 갱신하려면 UPDATE문을 사용한다.

UPDATE person SET birthday='20180808' WHERE id=2;

테이블의 데이터를 삭제하려면 다음와 같이 DELETE문을 사용한다.

DELETE FROM person WHERE id=2;

쿼리 데이터

DQL은 테이블 또는 여러 테이블에서 원하는 데이터 행을 검색하는 데 사용된다.

테이블의 데이터를 보려면 SELECT문을 사용한다.

SELECT * FROM person;

특정 열을 쿼리하려면 SELECT 키워드 뒤에 열 이름을 추가한다.

SELECT name FROM person;
+------+
| name |
+------+
| tom  |
+------+
1 rows in set (0.00 sec)

WHERE 절을 사용하여 조건과 일치하는 모든 레코드를 필터링하고 결과를 반환한다.

SELECT * FROM person where id<5;

사용자 생성, 승인 및 삭제

DCL은 일반적으로 사용자를 만들거나 삭제하고 사용자 권한을 관리하는데 사용된다.

사용자를 생성하려면 CREATE USER문을 사용한다. 다음 예제에서는 비밀번호가 123456tiuser 사용자를 생성한다.

CREATE USER 'tiuser'@'localhost' IDENTIFIED BY '123456';

samp_db 데이터베이스에서 테이블을 검색할 수 있는 권한을 tiuser에 부여하려면 다음을 수행한다.

GRANT SELECT ON samp_db.* TO 'tiuser'@'localhost';

tiuser의 권한을 확인하려면:

SHOW GRANTS for tiuser@localhost;

tiuser의 삭제하려면:

DROP USER 'tiuser'@'localhost';




최종 수정 : 2022-09-04