TiDBでSQLを試す
TiDBはMySQLと互換性があり、ほとんどの場合、MySQLのステートメントを直接使用できます。サポートされていない機能については、 MySQLとの互換性参照してください。
SQLを試したり、TiDBとMySQLクエリの互換性をテストしたりするには、 TiDB Playgroundを試すことができます。また、まずTiDBクラスターをデプロイしてから、その中でSQL文を実行することもできます。
このページでは、DDL、DML、CRUD操作などのTiDB SQL文について解説します。TiDB文の完全なリストについては、 SQLステートメントの概要を参照してください。
カテゴリ
SQLは、その関数に応じて以下の4種類に分類されます。
DDL(データ定義言語):データベース、テーブル、ビュー、インデックスなど、データベースオブジェクトを定義するために使用されます。
DML(データ操作言語):アプリケーション関連のレコードを操作するために使用されます。
DQL(データクエリ言語):条件付きフィルタリング後にレコードをクエリするために使用されます。
DCL(データ制御言語):アクセス権限とセキュリティレベルを定義するために使用されます。
一般的な DDL 機能には、オブジェクト (テーブルやインデックスなど) の作成、変更、削除があります。対応するコマンドはCREATE 、 ALTER 、 DROPです。
データベースの表示、作成、削除
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,
name VARCHAR(255),
birthday DATE
);
テーブルを作成するステートメント(DDL)を表示するには、 SHOW CREATE TABLEステートメントを使用します。
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 INDEX ALTER TABLEの中にネストできます。
DROP INDEX person_id ON person;
ALTER TABLE person DROP INDEX person_unique_id;
注記:
DDL操作はトランザクションではありません。DDL操作を実行する際に
COMMITステートメントを実行する必要はありません。
データの挿入、更新、削除
一般的な DML 機能には、テーブル レコードの追加、変更、削除があります。対応するコマンドはINSERT 、 UPDATE 、 DELETE 。
テーブルにデータを挿入するには、 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;
注記:
UPDATEおよびDELETEステートメントは、フィルターとしてWHERE句を指定しない場合、テーブル全体に対して動作します。
クエリデータ
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ステートメントを使用します。次の例ではtiuserという名前のユーザーを123456というパスワードで作成します。
CREATE USER 'tiuser'@'localhost' IDENTIFIED BY '123456';
tiuserにsamp_dbデータベース内のテーブルを取得する権限を付与するには:
GRANT SELECT ON samp_db.* TO 'tiuser'@'localhost';
tiuserの権限を確認するには:
SHOW GRANTS for tiuser@localhost;
tiuserを削除するには:
DROP USER 'tiuser'@'localhost';