diff --git a/.github/assign-by-files.yml b/.github/assign-by-files.yml new file mode 100644 index 0000000000000..936f0fc22bf24 --- /dev/null +++ b/.github/assign-by-files.yml @@ -0,0 +1,121 @@ +--- +# Changing all md files should request a language review in case of format failures. +# TomShawn is the repo administrator. + +# you can use glob pattern + +# You can set multiple reviewers +'.github/**/*.yml': + - yikeke + - ran-huang + +# 'benchmark/**/*.md': +# - jackysp +# - kissmydb +# - TomShawn + +'best-practices/**/*.md': + - kissmydb + - lilin90 + - TomShawn + +'br/**/*.md': + - kissmydb + - WangXiangUSTC + - TomShawn + +'config-templates/**/*.yaml': + - kissmydb + - superlzs0476 + - TomShawn + +'dashboard/**/*.md': + - breeswish + - hundundm + - kissmydb + - TomShawn + +'faq/**/*.md': + - kissmydb + - TomShawn + +# 'functions-and-operators/**/*.md': +# - kissmydb +# - TomShawn + +# 'media/**/*': +# - TomShawn +# - lilin90 + +'releases/**/*.md': + - scsldb + - uglyengineer + - TomShawn + +'resources/**/*': + - yikeke + - lilin90 + +'scripts/**/*': + - yikeke + - lilin90 + +'sql-statements/**/*.md': + - bb7133 + - zimulala + - TomShawn + - nullnotnil + +'mysql-compatibility.md': + - nullnotnil + +'sql-mode.md': + - nullnotnil + +'information-schema/**/*.md': + - nullnotnil + +# 'storage-engine/**/*.md': +# - TomShawn +# - + +# 'sync-diff-inspector/**/*.md': +# - TomShawn +# - + +# 'system-tables/**/*.md': +# - TomShawn +# - + +'ticdc/**/*.md': + - WangXiangUSTC + - 3pointer + - kissmydb + - TomShawn + +'tidb-binlog/**/*.md': + - july2993 + - kissmydb + - TomShawn + +'tidb-lightning/**/*.md': + - WangXiangUSTC + - kissmydb + - TomShawn + +'tiflash/**/*.md': + - ilovesoup + - zanmato1984 + - kissmydb + - yikeke + +'tiup/**/*.md': + - lonng + - lucklove + - kissmydb + - yikeke + +# All other file pattern will match the following: + +'**/*': + - TomShawn diff --git a/TOC.md b/TOC.md index 39aac6df41d1c..7c834117598a1 100644 --- a/TOC.md +++ b/TOC.md @@ -5,8 +5,37 @@ ## Documentation List +<<<<<<< HEAD + Introduction - [TiDB Introduction](/overview.md) +======= ++ About TiDB + + [TiDB Introduction](/overview.md) + + [What's New in TiDB 4.0](/whats-new-in-tidb-4.0.md) + + [Basic Features](/basic-features.md) + + [MySQL Compatibility](/mysql-compatibility.md) + + [TiDB Limitations](/tidb-limitations.md) ++ Quick Start + + [Try Out TiDB](/quick-start-with-tidb.md) + + [Learn TiDB SQL](/basic-sql-operations.md) ++ Deploy + + [Software and Hardware Requirements](/hardware-and-software-requirements.md) + + [Environment Configuration Checklist](/check-before-deployment.md) + + Topology Patterns + + [Minimal Topology](/minimal-deployment-topology.md) + + [TiFlash Topology](/tiflash-deployment-topology.md) + + [TiCDC Topology](/ticdc-deployment-topology.md) + + [TiDB Binlog Topology](/tidb-binlog-deployment-topology.md) + + [Cross-DC Topology](/geo-distributed-deployment-topology.md) + + [Hybrid Topology](/hybrid-deployment-topology.md) + + Install and Start + + Linux OS + + [Use TiUP (Recommended)](/production-deployment-using-tiup.md) + + [Use TiUP Offline (Recommended)](/production-offline-deployment-using-tiup.md) + + [Use TiDB Ansible](/online-deployment-using-ansible.md) + + [Use TiDB Ansible Offline](/offline-deployment-using-ansible.md) + + [Verify Cluster Status](/post-installation-check.md) +>>>>>>> ab766b1... sql-mode: update compatibility (#3192) + Benchmarks - [How to Test TiDB Using Sysbench](/benchmark/benchmark-tidb-using-sysbench.md) - [Sysbench Performance Test - v2.1 vs. v2.0](/benchmark/v2.1-performance-benchmarking-with-sysbench.md) diff --git a/mysql-compatibility.md b/mysql-compatibility.md index 88181fc334cf8..f67cd470a4dc4 100644 --- a/mysql-compatibility.md +++ b/mysql-compatibility.md @@ -9,9 +9,13 @@ aliases: ['/docs/v2.1/mysql-compatibility/','/docs/v2.1/reference/mysql-compatib TiDB supports both the MySQL wire protocol and the majority of its syntax. This means that you can use your existing MySQL connectors and clients, and your existing applications can often be migrated to TiDB without changing any application code. +<<<<<<< HEAD Currently TiDB Server advertises itself as MySQL 5.7 and works with most MySQL database tools such as PHPMyAdmin, Navicat, MySQL Workbench, mysqldump, and Mydumper/myloader. However, TiDB does not support some of MySQL features or behaves differently from MySQL because these features cannot be easily implemented in a distributed system. For some MySQL syntax, TiDB can parse but does not process it. For example, the `ENGINE` table option and the `PARTITION BY` clause in the `CREATE TABLE` statement can be parsed but are ignored. +======= +However, some features of MySQL are not supported. This could be because there is now a better way to solve the problem (such as XML functions superceded by JSON), or a lack of current demand versus effort required (such as stored procedures and functions). Some features might also be difficult to implement as a distributed system. +>>>>>>> ab766b1... sql-mode: update compatibility (#3192) > **Note:** > @@ -169,6 +173,7 @@ Architecturally, TiDB does support a similar storage engine abstraction to MySQL ### SQL modes +<<<<<<< HEAD TiDB supports **all of the SQL modes** from MySQL 5.7 with minor exceptions: - The compatibility modes deprecated in MySQL 5.7 and removed in MySQL 8.0 are not supported (such as `ORACLE`, `POSTGRESQL` etc). @@ -196,6 +201,13 @@ tidb> SELECT /*!90000 "I should not run", */ "I should run" FROM dual; +------------------+--------------+ 1 row in set (0.00 sec) ``` +======= +TiDB supports most [SQL modes](/sql-mode.md): + +- The compatibility modes, such as `ORACLE` and `POSTGRESQL` are parsed but ignored. Compatibility modes are deprecated in MySQL 5.7 and removed in MySQL 8.0. +- The `ONLY_FULL_GROUP_BY` mode has minor [semantic differences](/functions-and-operators/aggregate-group-by-functions.md#differences-from-mysql) from MySQL 5.7. +- The `NO_DIR_IN_CREATE` and `NO_ENGINE_SUBSTITUTION` SQL modes in MySQL are accepted for compatibility, but are not applicable to TiDB. +>>>>>>> ab766b1... sql-mode: update compatibility (#3192) ### Default differences diff --git a/sql-mode.md b/sql-mode.md new file mode 100644 index 0000000000000..346b8acdec5ea --- /dev/null +++ b/sql-mode.md @@ -0,0 +1,60 @@ +--- +title: SQL Mode +summary: Learn SQL mode. +category: reference +aliases: ['/docs/dev/sql-mode/','/docs/dev/reference/sql/sql-mode/'] +--- + +# SQL Mode + +TiDB servers operate in different SQL modes and apply these modes differently for different clients. SQL mode defines the SQL syntaxes that TiDB supports and the type of data validation check to perform, as described below: + ++ Before TiDB is started, modify the `--sql-mode="modes"` configuration item to set SQL mode. + ++ After TiDB is started, modify `SET [ SESSION | GLOBAL ] sql_mode='modes'` to set SQL mode. + +Ensure that you have `SUPER` privilege when setting SQL mode at `GLOBAL` level, and your setting at this level only affects the connections established afterwards. Changes to SQL mode at `SESSION` level only affect the current client. + +`Modes` are a series of different modes separated by commas (','). You can use the `SELECT @@sql_mode` statement to check the current SQL mode. The default value of SQL mode: `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`. + +## Important `sql_mode` values + +* `ANSI`: This mode complies with standard SQL. In this mode, data is checked. If data does not comply with the defined type or length, the data type is adjusted or trimmed and a `warning` is returned. +* `STRICT_TRANS_TABLES`: Strict mode, where data is strictly checked. When any incorrect data is inserted into a table, an error is returned. +* `TRADITIONAL`: In this mode, TiDB behaves like a "traditional" SQL database system. An error instead of a warning is returned when any incorrect value is inserted into a column. Then, the `INSERT` or `UPDATE` statement is immediately stopped. + +## SQL mode table + +| Name | Description | +| :--- | :--- | +| `PIPES_AS_CONCAT` | Treats "\|\|" as a string concatenation operator (`+`) (the same as `CONCAT()`), not as an `OR` (full support) | +| `ANSI_QUOTES` | Treats `"` as an identifier. If `ANSI_QUOTES` is enabled, only single quotes are treated as string literals, and double quotes are treated as identifiers. Therefore, double quotes cannot be used to quote strings. (full support)| +| `IGNORE_SPACE` | If this mode is enabled, the system ignores space. For example: "user" and "user " are the same. (full support)| +| `ONLY_FULL_GROUP_BY` | If a non-aggregated column that is referred to in `SELECT`, `HAVING`, or `ORDER BY` is absent in `GROUP BY`, this SQL statement is invalid, because it is abnormal for a column to be absent in `GROUP BY` but displayed by query. (full support) | +| `NO_UNSIGNED_SUBTRACTION` | Does not mark the result as `UNSIGNED` if an operand has no symbol in subtraction. (full support)| +| `NO_DIR_IN_CREATE` | Ignores all `INDEX DIRECTORY` and `DATA DIRECTORY` directives when a table is created. This option is only useful for slave replication servers (syntax support only) | +| `NO_KEY_OPTIONS` | When you use the `SHOW CREATE TABLE` statement, MySQL-specific syntaxes such as `ENGINE` are not exported. Consider this option when migrating across DB types using mysqldump. (syntax support only)| +| `NO_FIELD_OPTIONS` | When you use the `SHOW CREATE TABLE` statement, MySQL-specific syntaxes such as `ENGINE` are not exported. Consider this option when migrating across DB types using mysqldump. (syntax support only) | +| `NO_TABLE_OPTIONS` | When you use the `SHOW CREATE TABLE` statement, MySQL-specific syntaxes such as `ENGINE` are not exported. Consider this option when migrating across DB types using mysqldump. (syntax support only)| +| `NO_AUTO_VALUE_ON_ZERO` | If this mode is enabled, when the value passed in the `AUTO_INCREMENT` column is `0` or a specific value, the system directly writes this value to this column. When `NULL` is passed, the system automatically generates the next serial number. (full support)| +| `NO_BACKSLASH_ESCAPES` | If this mode is enabled, the `\` backslash symbol only stands for itself. (full support)| +| `STRICT_TRANS_TABLES` | Enables the strict mode for the transaction storage engine and rolls back the entire statement after an illegal value is inserted. (full support) | +| `STRICT_ALL_TABLES` | For transactional tables, rolls back the entire transaction statement after an illegal value is inserted. (full support) | +| `NO_ZERO_IN_DATE` | Strict mode, where dates with a month or day part of `0` are not accepted. If you use the `IGNORE` option, TiDB inserts '0000-00-00' for a similar date. In non-strict mode, this date is accepted but a warning is returned. (full support) +| `NO_ZERO_DATE` | Does not use '0000-00-00' as a legal date in strict mode. You can still insert a zero date with the `IGNORE` option. In non-strict mode, this date is accepted but a warning is returned. (full support)| +| `ALLOW_INVALID_DATES` | In this mode, the system does not check the validity of all dates. It only checks the month value ranging from `1` to `12` and the date value ranging from `1` to `31`. The mode only applies to `DATE` and `DATATIME` columns. All `TIMESTAMP` columns need a full validity check. (full support) | +| `ERROR_FOR_DIVISION_BY_ZERO` | If this mode is enabled, the system returns an error when handling division by `0` in data-change operations (`INSERT` or `UPDATE`).
If this mode is not enabled, the system returns a warning and `NULL` is used instead. (full support) | +| `NO_AUTO_CREATE_USER` | Prevents `GRANT` from automatically creating new users, except for the specified password (full support)| +| `HIGH_NOT_PRECEDENCE` | The precedence of the NOT operator is such that expressions such as `NOT a BETWEEN b AND c` are parsed as `NOT (a BETWEEN b AND c)`. In some older versions of MySQL, this expression is parsed as `(NOT a) BETWEEN b AND c`. (full support) | +| `NO_ENGINE_SUBSTITUTION` | Prevents the automatic replacement of storage engines if the required storage engine is disabled or not compiled. (syntax support only)| +| `PAD_CHAR_TO_FULL_LENGTH` | If this mode is enabled, the system does not trim the trailing spaces for `CHAR` types. (full support) | +| `REAL_AS_FLOAT` | Treats `REAL` as the synonym of `FLOAT`, not the synonym of `DOUBLE` (full support)| +| `POSTGRESQL` | Equivalent to `PIPES_AS_CONCAT`, `ANSI_QUOTES`, `IGNORE_SPACE`, `NO_KEY_OPTIONS`, `NO_TABLE_OPTIONS`, `NO_FIELD_OPTIONS` (syntax support only)| +| `MSSQL` | Equivalent to `PIPES_AS_CONCAT`, `ANSI_QUOTES`, `IGNORE_SPACE`, `NO_KEY_OPTIONS`, `NO_TABLE_OPTIONS`, `NO_FIELD_OPTIONS` (syntax support only)| +| `DB2` | Equivalent to `PIPES_AS_CONCAT`, `ANSI_QUOTES`, `IGNORE_SPACE`, `NO_KEY_OPTIONS`, `NO_TABLE_OPTIONS`, `NO_FIELD_OPTIONS` (syntax support only)| +| `MAXDB` | Equivalent to `PIPES_AS_CONCAT`, `ANSI_QUOTES`, `IGNORE_SPACE`, `NO_KEY_OPTIONS`, `NO_TABLE_OPTIONS`, `NO_FIELD_OPTIONS`, `NO_AUTO_CREATE_USER` (full support)| +| `MySQL323` | Equivalent to `NO_FIELD_OPTIONS`, `HIGH_NOT_PRECEDENCE` (syntax support only)| +| `MYSQL40` | Equivalent to `NO_FIELD_OPTIONS`, `HIGH_NOT_PRECEDENCE` (syntax support only)| +| `ANSI` | Equivalent to `REAL_AS_FLOAT`, `PIPES_AS_CONCAT`, `ANSI_QUOTES`, `IGNORE_SPACE` (syntax support only)| +| `TRADITIONAL` | Equivalent to `STRICT_TRANS_TABLES`, `STRICT_ALL_TABLES`, `NO_ZERO_IN_DATE`, `NO_ZERO_DATE`, `ERROR_FOR_DIVISION_BY_ZERO`, `NO_AUTO_CREATE_USER` (syntax support only) | +| `ORACLE` | Equivalent to `PIPES_AS_CONCAT`, `ANSI_QUOTES`, `IGNORE_SPACE`, `NO_KEY_OPTIONS`, `NO_TABLE_OPTIONS`, `NO_FIELD_OPTIONS`, `NO_AUTO_CREATE_USER` (syntax support only)|