- TiDBについて
- クイックスタート
- 発展させる
- 概要
- クイックスタート
- TiDB CloudでTiDBクラスターを構築する(DevTier)
- TiDBのCRUDSQL
- TiDBを使用してシンプルなCRUDアプリを構築する
- アプリケーション例
- TiDBに接続する
- データベーススキーマの設計
- データの書き込み
- データの読み取り
- 取引
- 最適化
- トラブルシューティング
- 参照
- デプロイ
- 移行する
- 管理
- 監視と警告
- トラブルシューティング
- TiDBトラブルシューティングマップ
- 遅いクエリを特定する
- 遅いクエリを分析する
- SQL診断
- Top SQLを使用して高価なクエリを特定する
- ログを使用して高価なクエリを特定する
- ステートメント要約表
- ホットスポットの問題のトラブルシューティング
- 読み取りと書き込みの待ち時間の増加のトラブルシューティング
- クラスタのオンサイト情報を保存および復元する
- クラスタセットアップのトラブルシューティング
- 高いディスクI/O使用量のトラブルシューティング
- ロックの競合のトラブルシューティング
- TiFlashのトラブルシューティング
- 楽観的なトランザクションでの書き込みの競合のトラブルシューティング
- データとインデックス間の不整合のトラブルシューティング
- 性能チューニング
- チューニングガイド
- Configuration / コンフィグレーションの調整
- システムチューニング
- ソフトウェアのチューニング
- SQLチューニング
- チュートリアル
- TiDBツール
- 概要
- ユースケース
- ダウンロード
- TiUP
- ドキュメントマップ
- 概要
- 用語と概念
- TiUPコンポーネントを管理する
- FAQ
- トラブルシューティングガイド
- コマンドリファレンス
- 概要
- TiUPコマンド
- TiUPクラスターコマンド
- 概要
- tiup cluster audit
- tiup cluster check
- tiup cluster clean
- tiup cluster deploy
- tiup cluster destroy
- tiup cluster disable
- tiup cluster display
- tiup cluster edit-config
- tiup cluster enable
- tiup cluster help
- tiup cluster import
- tiup cluster list
- tiup cluster patch
- tiup cluster prune
- tiup cluster reload
- tiup cluster rename
- tiup cluster replay
- tiup cluster restart
- tiup cluster scale-in
- tiup cluster scale-out
- tiup cluster start
- tiup cluster stop
- tiup cluster template
- tiup cluster upgrade
- TiUPDMコマンド
- 概要
- tiup dm audit
- tiup dm deploy
- tiup dm destroy
- tiup dm disable
- tiup dm display
- tiup dm edit-config
- tiup dm enable
- tiup dm help
- tiup dm import
- tiup dm list
- tiup dm patch
- tiup dm prune
- tiup dm reload
- tiup dm replay
- tiup dm restart
- tiup dm scale-in
- tiup dm scale-out
- tiup dm start
- tiup dm stop
- tiup dm template
- tiup dm upgrade
- TiDBクラスタートポロジリファレンス
- DMクラスタートポロジリファレンス
- ミラーリファレンスガイド
- TiUPコンポーネント
- PingCAPクリニック診断サービス(テクニカルプレビュー)
- TiDB Operator
- Dumpling
- TiDB Lightning
- TiDBデータ移行
- TiDBデータ移行について
- クイックスタート
- DMクラスタをデプロイする
- チュートリアル
- 高度なチュートリアル
- シャーディングされたテーブルからのデータのマージと移行
- GH-ost/PT-oscを使用するMySQLデータベースからの移行
- より多くの列を持つダウンストリームTiDBテーブルにデータを移行する
- 管理
- 参照
- 例
- トラブルシューティング
- リリースノート
- バックアップと復元(BR)
- TiDB Binlog
- TiCDC
- Dumpling
- sync-diff-inspector
- TiSpark
- 参照
- クラスターアーキテクチャ
- 主要な監視指標
- セキュリティ
- 権限
- SQL
- SQL言語の構造と構文
- SQLステートメント
ADD COLUMN
ADD INDEX
ADMIN
ADMIN CANCEL DDL
ADMIN CHECKSUM TABLE
ADMIN CHECK [TABLE|INDEX]
ADMIN SHOW DDL [JOBS|QUERIES]
ADMIN SHOW TELEMETRY
ALTER DATABASE
ALTER INDEX
ALTER INSTANCE
ALTER PLACEMENT POLICY
ALTER TABLE
ALTER USER
ANALYZE TABLE
BACKUP
BATCH
BEGIN
CHANGE COLUMN
COMMIT
CHANGE DRAINER
CHANGE PUMP
CREATE [GLOBAL|SESSION] BINDING
CREATE DATABASE
CREATE INDEX
CREATE PLACEMENT POLICY
CREATE ROLE
CREATE SEQUENCE
CREATE TABLE LIKE
CREATE TABLE
CREATE USER
CREATE VIEW
DEALLOCATE
DELETE
DESC
DESCRIBE
DO
DROP [GLOBAL|SESSION] BINDING
DROP COLUMN
DROP DATABASE
DROP INDEX
DROP PLACEMENT POLICY
DROP ROLE
DROP SEQUENCE
DROP STATS
DROP TABLE
DROP USER
DROP VIEW
EXECUTE
EXPLAIN ANALYZE
EXPLAIN
FLASHBACK TABLE
FLUSH PRIVILEGES
FLUSH STATUS
FLUSH TABLES
GRANT <privileges>
GRANT <role>
INSERT
KILL [TIDB]
LOAD DATA
LOAD STATS
MODIFY COLUMN
PREPARE
RECOVER TABLE
RENAME INDEX
RENAME TABLE
REPLACE
RESTORE
REVOKE <privileges>
REVOKE <role>
ROLLBACK
SELECT
SET DEFAULT ROLE
SET [NAMES|CHARACTER SET]
SET PASSWORD
SET ROLE
SET TRANSACTION
SET [GLOBAL|SESSION] <variable>
SHOW ANALYZE STATUS
SHOW [BACKUPS|RESTORES]
SHOW [GLOBAL|SESSION] BINDINGS
SHOW BUILTINS
SHOW CHARACTER SET
SHOW COLLATION
SHOW [FULL] COLUMNS FROM
SHOW CONFIG
SHOW CREATE PLACEMENT POLICY
SHOW CREATE SEQUENCE
SHOW CREATE TABLE
SHOW CREATE USER
SHOW DATABASES
SHOW DRAINER STATUS
SHOW ENGINES
SHOW ERRORS
SHOW [FULL] FIELDS FROM
SHOW GRANTS
SHOW INDEX [FROM|IN]
SHOW INDEXES [FROM|IN]
SHOW KEYS [FROM|IN]
SHOW MASTER STATUS
SHOW PLACEMENT
SHOW PLACEMENT FOR
SHOW PLACEMENT LABELS
SHOW PLUGINS
SHOW PRIVILEGES
SHOW [FULL] PROCESSSLIST
SHOW PROFILES
SHOW PUMP STATUS
SHOW SCHEMAS
SHOW STATS_HEALTHY
SHOW STATS_HISTOGRAMS
SHOW STATS_META
SHOW STATUS
SHOW TABLE NEXT_ROW_ID
SHOW TABLE REGIONS
SHOW TABLE STATUS
SHOW [FULL] TABLES
SHOW [GLOBAL|SESSION] VARIABLES
SHOW WARNINGS
SHUTDOWN
SPLIT REGION
START TRANSACTION
TABLE
TRACE
TRUNCATE
UPDATE
USE
WITH
- データ型
- 関数と演算子
- クラスター化インデックス
- 制約
- 生成された列
- SQLモード
- テーブル属性
- トランザクション
- ガベージコレクション(GC)
- ビュー
- パーティショニング
- 一時テーブル
- キャッシュされたテーブル
- 文字セットと照合
- SQLの配置ルール
- システムテーブル
mysql
- INFORMATION_SCHEMA
- 概要
ANALYZE_STATUS
CLIENT_ERRORS_SUMMARY_BY_HOST
CLIENT_ERRORS_SUMMARY_BY_USER
CLIENT_ERRORS_SUMMARY_GLOBAL
CHARACTER_SETS
CLUSTER_CONFIG
CLUSTER_HARDWARE
CLUSTER_INFO
CLUSTER_LOAD
CLUSTER_LOG
CLUSTER_SYSTEMINFO
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
DATA_LOCK_WAITS
DDL_JOBS
DEADLOCKS
ENGINES
INSPECTION_RESULT
INSPECTION_RULES
INSPECTION_SUMMARY
KEY_COLUMN_USAGE
METRICS_SUMMARY
METRICS_TABLES
PARTITIONS
PLACEMENT_POLICIES
PROCESSLIST
REFERENTIAL_CONSTRAINTS
SCHEMATA
SEQUENCES
SESSION_VARIABLES
SLOW_QUERY
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_STORAGE_STATS
TIDB_HOT_REGIONS
TIDB_HOT_REGIONS_HISTORY
TIDB_INDEXES
TIDB_SERVERS_INFO
TIDB_TRX
TIFLASH_REPLICA
TIKV_REGION_PEERS
TIKV_REGION_STATUS
TIKV_STORE_STATUS
USER_PRIVILEGES
VIEWS
METRICS_SCHEMA
- UI
- TiDBダッシュボード
- 概要
- 管理
- アクセス
- 概要ページ
- クラスター情報ページ
- Top SQLページ
- キービジュアライザーページ
- メトリクス関係グラフ
- SQLステートメント分析
- 遅いクエリページ
- クラスター診断
- 検索ログページ
- インスタンスプロファイリング
- セッションの管理とConfiguration / コンフィグレーション
- FAQ
- CLI
- コマンドラインフラグ
- Configuration / コンフィグレーションファイルのパラメーター
- システム変数
- ストレージエンジン
- テレメトリー
- エラーコード
- テーブルフィルター
- トポロジラベルによるレプリカのスケジュール
- よくある質問
- リリースノート
- すべてのリリース
- リリースタイムライン
- TiDBバージョニング
- v6.1
- v6.0
- v5.4
- v5.3
- v5.2
- v5.1
- v5.0
- v4.0
- v3.1
- v3.0
- v2.1
- v2.0
- v1.0
- 用語集
MySQLの互換性
TiDBは、MySQL5.7プロトコルおよびMySQL5.7の一般的な機能と構文と高い互換性があります。 MySQL 5.7のエコシステムツール(PHPMyAdmin、Navicat、MySQL Workbench、mysqldump、およびMydumper / myloader)とMySQLクライアントをTiDBに使用できます。
ただし、MySQLの一部の機能はサポートされていません。これは、問題を解決するためのより良い方法(JSONに置き換えられたXML関数など)があるか、現在の需要と必要な労力(ストアドプロシージャや関数など)が不足していることが原因である可能性があります。一部の機能は、分散システムとして実装するのが難しい場合もあります。
- さらに、TiDBはMySQLレプリケーションプロトコルをサポートしていませんが、MySQLでデータをレプリケートするための特定のツールを提供します。
- MySQLからのデータの複製: TiDBデータ移行(DM)は、MySQL/MariaDBからTiDBへの完全なデータ移行と増分データ複製をサポートするツールです。
- MySQLへのデータの複製: TiCDCは、TiKV変更ログをプルすることによってTiDBの増分データを複製するためのツールです。 TiCDCはMySQLシンクを使用して、TiDBの増分データをMySQLに複製します。
ノート:
このページでは、MySQLとTiDBの一般的な違いについて説明します。 安全と悲観的なトランザクションモードの互換性については、専用ページを参照してください。
サポートされていない機能
- ストアドプロシージャと関数
- トリガー
- イベント
- ユーザー定義関数
FOREIGN KEY
制約#18209FULLTEXT
構文とインデックス#1793SPATIAL
(GIS
とも呼ばれGEOMETRY
)関数、データ型、およびインデックス#6347ascii
、binary
latin1
utf8
のutf8mb4
gbk
。- SYSスキーマ
- オプティマイザートレース
- XML関数
- Xプロトコル#1109
- セーブポイント#6840
- 列レベルの特権#9766
XA
構文(TiDBは内部で2フェーズコミットを使用しますが、これはSQLインターフェイスを介して公開されません)CREATE TABLE tblName AS SELECT stmt
構文#4754CHECK TABLE
構文#4673CHECKSUM TABLE
構文#1895REPAIR TABLE
構文OPTIMIZE TABLE
構文HANDLER
ステートメントCREATE TABLESPACE
ステートメント
MySQLとは異なる機能
自動インクリメントID
TiDBでは、自動増分列はグローバルに一意です。これらは単一のTiDBサーバーではインクリメンタルですが、複数のTiDBサーバー間でインクリメンタルである必要はなく、順番に割り当てられる必要もありません。デフォルト値とカスタム値を混在させないことをお勧めします。そうしないと、
Duplicated Error
のエラーメッセージが表示される場合があります。tidb_allow_remove_auto_inc
システム変数を使用して、AUTO_INCREMENT
列属性の削除を許可または禁止できます。列属性を削除する構文はALTER TABLE MODIFY
またはALTER TABLE CHANGE
です。TiDBは
AUTO_INCREMENT
列属性の追加をサポートしておらず、一度削除するとこの属性を回復することはできません。詳細については、
AUTO_INCREMENT
を参照してください。
ノート:
- テーブルの作成時に主キーを指定しなかった場合、TiDBは
_tidb_rowid
を使用して行を識別します。この値の割り当ては、自動インクリメント列とアロケータを共有します(そのような列が存在する場合)。主キーとして自動インクリメント列を指定すると、TiDBはこの列を使用して行を識別します。この状況では、次の状況が発生する可能性があります。
mysql> CREATE TABLE t(id INT UNIQUE KEY AUTO_INCREMENT);
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO t VALUES(),(),();
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT _tidb_rowid, id FROM t;
+-------------+------+
| _tidb_rowid | id |
+-------------+------+
| 4 | 1 |
| 5 | 2 |
| 6 | 3 |
+-------------+------+
3 rows in set (0.01 sec)
パフォーマンススキーマ
TiDBは、 プロメテウスとグラファナの組み合わせを使用して、パフォーマンス監視メトリックを格納および照会します。パフォーマンススキーマテーブルは、TiDBに空の結果を返します。
クエリ実行プラン
EXPLAIN FOR
のクエリ実行プラン( EXPLAIN
)の出力形式、出力内容、および特権設定は、MySQLのものとは大きく異なります。
MySQLシステム変数optimizer_switch
はTiDBでは読み取り専用であり、クエリプランには影響しません。 MySQLと同様の構文でオプティマイザーのヒントを使用することもできますが、使用可能なヒントと実装が異なる場合があります。
詳細については、 クエリ実行プランを理解するを参照してください。
内蔵機能
TiDBは、MySQLの組み込み関数のほとんどをサポートしていますが、すべてをサポートしているわけではありません。ステートメントSHOW BUILTINS
は、使用可能な関数のリストを提供します。
参照: TiDBSQL文法 。
DDL
TiDBでは、サポートされているすべてのDDL変更はオンラインで実行されます。 MySQLのDDL操作と比較して、TiDBのDDL操作には次の主要な制限があります。
ALTER TABLE
のステートメントで複数の操作を完了することはできません。たとえば、1つのステートメントに複数の列またはインデックスを追加することはできません。そうしないと、Unsupported multi schema change
エラーが出力される可能性があります。TiDBの
ALTER TABLE
は、一部のデータ型の変更をサポートしていません。たとえば、TiDBはDECIMAL
タイプからDATE
タイプへの変更をサポートしていません。データ型の変更がサポートされていない場合、TiDBはUnsupported modify column: type %d not match origin %d
エラーを報告します。詳細については、ALTER TABLE
を参照してください。ALGORITHM={INSTANT,INPLACE,COPY}
構文は、TiDBのアサーションとしてのみ機能し、ALTER
アルゴリズムを変更しません。詳細については、ALTER TABLE
を参照してください。CLUSTERED
タイプの主キーの追加/削除はサポートされていません。CLUSTERED
タイプの主キーの詳細については、 クラスター化されたインデックスを参照してください。さまざまなタイプのインデックス(
HASH|BTREE|RTREE|FULLTEXT
)はサポートされておらず、指定すると解析されて無視されます。テーブルパーティショニングは、
HASH
、およびRANGE
のパーティショニングタイプをサポートしLIST
。サポートされていないパーティションタイプの場合、Warning: Unsupported partition type %s, treat as normal table
エラーが出力されることがあります%s
は特定のパーティションタイプです。テーブルパーティショニングは、
ADD
、およびDROP
の操作もサポートしTRUNCATE
。他のパーティション操作は無視されます。次のテーブルパーティション構文はサポートされていません。PARTITION BY KEY
SUBPARTITION
{CHECK|TRUNCATE|OPTIMIZE|REPAIR|IMPORT|DISCARD|REBUILD|REORGANIZE|COALESCE} PARTITION
詳細については、 パーティショニングを参照してください。
テーブルを分析する
統計収集は、MySQLとMySQLでの動作が異なります。つまり、MySQL / InnoDBでは比較的軽量で短期間の操作ですが、TiDBではテーブルの統計を完全に再構築し、完了するまでにはるかに長い時間がかかる可能性があります。
これらの違いについては、 ANALYZE TABLE
で詳しく説明しています。
SELECT
構文の制限
- 構文
SELECT ... INTO @variable
はサポートされていません。 - 構文
SELECT ... GROUP BY ... WITH ROLLUP
はサポートされていません。 - 構文
SELECT .. GROUP BY expr
は、MySQL5.7のようにGROUP BY expr ORDER BY expr
を意味しません。
詳細については、 SELECT
ステートメントのリファレンスを参照してください。
UPDATE
ステートメント
UPDATE
ステートメントのリファレンスを参照してください。
ビュー
TiDBのビューは更新できません。 UPDATE
などのINSERT
操作はサポートしてDELETE
ません。
一時テーブル
詳細については、 TiDBローカル一時テーブルとMySQL一時テーブル間の互換性を参照してください。
文字セットと照合
TiDBでサポートされている文字セットと照合の詳細については、 文字セットと照合の概要を参照してください。
GBK文字セットのMySQL互換性については、 GBKの互換性を参照してください。
TiDBは、テーブルで使用されている文字セットを国別文字セットとして継承します。
ストレージエンジン
互換性の理由から、TiDBは代替ストレージエンジンでテーブルを作成する構文をサポートしています。実装では、TiDBはメタデータをInnoDBストレージエンジンとして記述します。
TiDBはMySQLと同様のストレージエンジンの抽象化をサポートしていますが、TiDBサーバーを起動するときに--store
オプションを使用してストレージエンジンを指定する必要があります。
SQLモード
TiDBはほとんどのSQLモードをサポートします:
Oracle
やPostgreSQL
などの互換モードは解析されますが、無視されます。互換モードはMySQL5.7で非推奨になり、MySQL8.0で削除されました。ONLY_FULL_GROUP_BY
モードには、MySQL5.7のマイナー意味の違いがあります。- MySQLの
NO_DIR_IN_CREATE
およびNO_ENGINE_SUBSTITUTION
モードは互換性のために受け入れられていますが、TiDBには適用されません。
デフォルトの違い
- デフォルトの文字セット:
- TiDBのデフォルト値は
utf8mb4
です。 - MySQL5.7のデフォルト値は
latin1
です。 - MySQL8.0のデフォルト値は
utf8mb4
です。
- TiDBのデフォルト値は
- デフォルトの照合順序:
- TiDBのデフォルトの
utf8mb4
の照合順序はutf8mb4_bin
です。 - MySQL5.7の
utf8mb4
のデフォルトの照合順序はutf8mb4_general_ci
です。 - MySQL8.0のデフォルトの
utf8mb4
の照合順序はutf8mb4_0900_ai_ci
です。
- TiDBのデフォルトの
- デフォルト値
foreign_key_checks
:- TiDBのデフォルト値は
OFF
で、現在TiDBはOFF
のみをサポートしています。 - MySQL5.7のデフォルト値は
ON
です。
- TiDBのデフォルト値は
- デフォルトのSQLモード:
- TiDBのデフォルトのSQLモードには、次のモードが含まれ
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
。 - MySQLのデフォルトのSQLモード:
- MySQL5.7のデフォルトのSQLモードはTiDBと同じです。
- MySQL 8.0のデフォルトのSQLモードには、次のモードが含まれてい
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
。
- TiDBのデフォルトのSQLモードには、次のモードが含まれ
- デフォルト値
lower_case_table_names
:- TiDBのデフォルト値は
2
で、現在TiDBは2
のみをサポートしています。 - MySQLのデフォルト値:
- Linuxの場合:
0
- Windowsの場合:
1
- macOSの場合:
2
- Linuxの場合:
- TiDBのデフォルト値は
- デフォルト値
explicit_defaults_for_timestamp
:- TiDBのデフォルト値は
ON
で、現在TiDBはON
のみをサポートしています。 - MySQLのデフォルト値:
- MySQL 5.7の場合:
OFF
。 - MySQL 8.0の場合:
ON
。
- MySQL 5.7の場合:
- TiDBのデフォルト値は
日時
名前付きタイムゾーン
- TiDBは、現在システムにインストールされているすべてのタイムゾーンルールを計算に使用します(通常は
tzdata
のパッケージ)。タイムゾーンテーブルデータをインポートせずに、すべてのタイムゾーン名を使用できます。タイムゾーンテーブルデータをインポートして計算ルールを変更することはできません。 - MySQLはデフォルトでローカルタイムゾーンを使用し、計算のためにシステムに組み込まれている現在のタイムゾーンルール(夏時間を開始するタイミングなど)に依存します。また、タイムゾーンはタイムゾーンテーブルデータのインポートなしのタイムゾーン名で指定することはできません。
型システムの違い
次の列タイプはMySQLでサポートされていますが、TiDBではサポートされていません。
- FLOAT4 / FLOAT8
SQL_TSI_*
(SQL_TSI_MONTH、SQL_TSI_WEEK、SQL_TSI_DAY、SQL_TSI_HOUR、SQL_TSI_MINUTE、およびSQL_TSI_SECONDを含み、SQL_TSI_YEARを除く)
非推奨の機能によって引き起こされる非互換性
TiDBは、MySQLで非推奨としてマークされている特定の機能を実装していません。