TiDBでSQLを探索する
TiDBはMySQLと互換性があり、ほとんどの場合、MySQLステートメントを直接使用できます。サポートされていない機能については、 MySQLとの互換性を参照してください。
SQLを試し、MySQLクエリとのTiDBの互換性をテストするには、次のようにしますTiDBをインストールせずに、Webブラウザで直接実行します 。また、最初にTiDBクラスタをデプロイしてから、そのクラスターでSQLステートメントを実行することもできます。
このページでは、DDL、DML、CRUD操作などの基本的なTiDBSQLステートメントについて説明します。 TiDBステートメントの完全なリストについては、 TiDBSQL構文図を参照してください。
カテゴリー
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;
たとえば、number、name、birthdayなどのフィールドを含む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 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;
ノート:
フィルタとして
WHERE
句を含まないUPDATE
およびDELETE
ステートメントは、テーブル全体で機能します。
クエリデータ
DQLは、1つまたは複数のテーブルから目的のデータ行を取得するために使用されます。
テーブル内のデータを表示するには、 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
ステートメントを使用します。次の例では、パスワード123456
を使用してtiuser
という名前のユーザーを作成します。
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';