TiDBのSQLを見てみる

TiDBはMySQLと互換性があり、ほとんどの場合MySQL文をそのまま使用できる。サポートされない機能の詳細は、MySQLとの互換性を参照してほしい。

SQLを試し、MySQLクエリとのTiDB互換性をテストしたい場合は、TiDBをインストールせずにWebブラウザで直接実行できる。まずTiDBクラスタをデプロイしてからSQL文を実行することもできる。

このページでは、DDL、DML、CRUD操作のような基本的なTiDB SQL文について説明する。TiDB文の完全な一覧はTiDB SQL構文ダイアグラムを参照してほしい。

カテゴリ

SQLは機能に応じて次の4種類に分けられる。

  • DDL(データ定義言語): データベース、テーブル、ビュー、インデックスなどのデータベースオブジェクトを定義するために使用される。
  • DML(Data Manipulation Language): アプリケーション関連レコードを操作するために使用される。
  • DQL(Data Query Language): 条件フィルタリング後にレコードをクエリするために使用される。
  • DCL(Data Control Language): アクセス権限およびセキュリティレベルを定義するために使用される。

一般的なDDL機能は、オブジェクト(テーブルやインデックスなど)の作成、変更、削除である。該当するコマンドはCREATEALTERDROPである。

データベースの表示、作成、削除

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機能は、テーブルレコードを追加、変更、削除することである。該当するコマンドはINSERTUPDATEDELETEである。

テーブルにデータを挿入するには、次のように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';