diff --git a/auto-random.md b/auto-random.md index 6f536d1f8182..c7dad8da50e3 100644 --- a/auto-random.md +++ b/auto-random.md @@ -138,7 +138,7 @@ CREATE TABLE t (a bigint PRIMARY KEY AUTO_RANDOM) 目前在 TiDB 中使用 `AUTO_RANDOM` 有以下限制: -- 该属性必须指定在整数类型的主键列上,否则会报错。此外,当配置项 `alter-primary-key` 的值为 `true` 时,即使是整型主键列,也不支持使用 `AUTO_RANDOM`。 +- 该属性必须指定在整数类型的主键列上,否则会报错。此外,当主键属性为 `NONCLUSTERED` 时,即使是整型主键列,也不支持使用 `AUTO_RANDOM`。要了解关于 `CLUSTERED` 主键的详细信息,请参考[聚簇索引](/clustered-indexes.md)。 - 不支持使用 `ALTER TABLE` 来修改 `AUTO_RANDOM` 属性,包括添加或移除该属性。 - 不支持修改含有 `AUTO_RANDOM` 属性的主键列的列类型。 - 不支持与 `AUTO_INCREMENT` 同时指定在同一列上。 diff --git a/constraints.md b/constraints.md index 3def8a9a416f..0391d6969cf8 100644 --- a/constraints.md +++ b/constraints.md @@ -238,9 +238,31 @@ Query OK, 0 rows affected (0.10 sec) * 表 `t3` 创建失败,因为一张表只能有一个主键。 * 表 `t4` 创建成功,因为虽然只能有一个主键,但 TiDB 支持定义一个多列组合作为复合主键。 -除上述规则外,默认情况下,TiDB 还有一个额外限制,即一旦一张表创建成功,其主键就不能再改变。如果需要添加/删除主键,需要在 TiDB 配置文件中将 `alter-primary-key` 设置为 `true`,并重启 TiDB 实例使之生效。 +除上述规则外,TiDB 目前仅支持对 `NONCLUSTERED` 的主键进行添加和删除操作。例如: -当开启添加/删除主键功能以后,TiDB 允许对表添加/删除主键。但需要注意的是,对于在未开启该功能时创建的整数类型的主键的表,即使开启添加/删除主键功能,也不能删除其主键约束。 +{{< copyable "sql" >}} + +```sql +CREATE TABLE t5 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY (a,b) CLUSTERED); +ALTER TABLE t5 DROP PRIMARY KEY; +``` + +``` +ERROR 8200 (HY000): Unsupported drop primary key when the table is using clustered index +``` + +{{< copyable "sql" >}} + +```sql +CREATE TABLE t5 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY (a,b) NONCLUSTERED); +ALTER TABLE t5 DROP PRIMARY KEY; +``` + +``` +Query OK, 0 rows affected (0.10 sec) +``` + +要了解关于 `CLUSTERED` 主键的详细信息,请参考[聚簇索引](/clustered-indexes.md)。 ## 外键约束 diff --git a/dynamic-config.md b/dynamic-config.md index 8b5e5bbb8c3b..195271ae648d 100644 --- a/dynamic-config.md +++ b/dynamic-config.md @@ -28,7 +28,6 @@ show config; | Type | Instance | Name | Value | +------+-----------------+-----------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tidb | 127.0.0.1:4001 | advertise-address | 127.0.0.1 | -| tidb | 127.0.0.1:4001 | alter-primary-key | false | | tidb | 127.0.0.1:4001 | binlog.binlog-socket | | | tidb | 127.0.0.1:4001 | binlog.enable | false | | tidb | 127.0.0.1:4001 | binlog.ignore-error | false | diff --git a/mysql-compatibility.md b/mysql-compatibility.md index 4403091c405a..563132355f7f 100644 --- a/mysql-compatibility.md +++ b/mysql-compatibility.md @@ -93,7 +93,7 @@ TiDB 中,所有支持的 DDL 变更操作都是在线执行的。与 MySQL 相 * 不能在单条 `ALTER TABLE` 语句中完成多个操作。例如,不能在单个语句中添加多个列或索引,否则,可能会输出 `Unsupported multi schema change` 的错误。 * 不支持不同类型的索引 (`HASH|BTREE|RTREE|FULLTEXT`)。若指定了不同类型的索引,TiDB 会解析并忽略这些索引。 -* 不支持添加/删除主键,除非开启了 [`alter-primary-key`](/tidb-configuration-file.md#alter-primary-key) 配置项。 +* 不支持添加/删除 `CLUSTERED` 类型的主键。要了解关于 `CLUSTERED` 主键的详细信息,请参考[聚簇索引](/clustered-indexes.md)。 * 不支持将字段类型修改为其超集,例如不支持从 `INTEGER` 修改为 `VARCHAR`,或者从 `TIMESTAMP` 修改为 `DATETIME`,否则可能输出的错误信息 `Unsupported modify column: type %d not match origin %d`。 * 更改/修改数据类型时,尚未支持“有损更改”,例如不支持从 BIGINT 更改为 INT。 * 更改/修改 DECIMAL 类型时,不支持更改精度。 diff --git a/sql-statements/sql-statement-add-index.md b/sql-statements/sql-statement-add-index.md index 2eb8d5a44d50..6a3ef88e02d8 100644 --- a/sql-statements/sql-statement-add-index.md +++ b/sql-statements/sql-statement-add-index.md @@ -156,7 +156,7 @@ EXPLAIN SELECT * FROM t1 WHERE c1 = 3; * 不支持 `VISIBLE/INVISIBLE` 索引(目前只有 master 分支上真正支持此功能)。 * 不支持降序索引(类似于 MySQL 5.7)。 * 目前尚不支持在一条中同时添加多个索引。 -* 默认无法向表中添加 `PRIMARY KEY`,在开启 `alter-primary-key` 配置项后可支持此功能,详情可参考:[alter-primary-key](/tidb-configuration-file.md#alter-primary-key)。 +* 无法向表中添加 `CLUSTERED` 类型的 `PRIMARY KEY`。要了解关于 `CLUSTERED` 主键的详细信息,请参考[聚簇索引](/clustered-indexes.md)。 ## 另请参阅 diff --git a/sql-statements/sql-statement-create-index.md b/sql-statements/sql-statement-create-index.md index fa23afb8d320..c907938b73a8 100644 --- a/sql-statements/sql-statement-create-index.md +++ b/sql-statements/sql-statement-create-index.md @@ -203,7 +203,7 @@ CREATE UNIQUE INDEX c1 ON t1 (c1) INVISIBLE; * 不支持 `FULLTEXT`,`HASH` 和 `SPATIAL` 索引。 * 不支持降序索引 (类似于 MySQL 5.7)。 -* 默认无法向表中添加 `PRIMARY KEY`,在开启 `alter-primary-key` 配置项后可支持此功能,详情参考:[alter-primary-key](/tidb-configuration-file.md#alter-primary-key)。 +* 无法向表中添加 `CLUSTERED` 类型的 `PRIMARY KEY`。要了解关于 `CLUSTERED` 主键的详细信息,请参考[聚簇索引](/clustered-indexes.md)。 ## 另请参阅 diff --git a/sql-statements/sql-statement-drop-index.md b/sql-statements/sql-statement-drop-index.md index 38b6b625fbb1..28e5a9283566 100644 --- a/sql-statements/sql-statement-drop-index.md +++ b/sql-statements/sql-statement-drop-index.md @@ -107,7 +107,7 @@ Query OK, 0 rows affected (0.30 sec) ## MySQL 兼容性 -* 默认不支持删除 `PRIMARY KEY`,在开启 `alter-primary-key` 配置项后可支持此功能,详情参考:[alter-primary-key](/tidb-configuration-file.md#alter-primary-key)。 +* 不支持删除 `CLUSTERED` 类型的 `PRIMARY KEY`。要了解关于 `CLUSTERED` 主键的详细信息,请参考[聚簇索引](/clustered-indexes.md)。 ## 另请参阅 diff --git a/sql-statements/sql-statement-show-config.md b/sql-statements/sql-statement-show-config.md index 4fa6cf9f8b70..345d4211898d 100644 --- a/sql-statements/sql-statement-show-config.md +++ b/sql-statements/sql-statement-show-config.md @@ -36,7 +36,6 @@ SHOW CONFIG; | Type | Instance | Name | Value | +------+----------------+-------------------------------------------------+---------------------------------------------------------------------+ | tidb | 127.0.0.1:4000 | advertise-address | 127.0.0.1 | -| tidb | 127.0.0.1:4000 | alter-primary-key | false | | tidb | 127.0.0.1:4000 | binlog.binlog-socket | | | tidb | 127.0.0.1:4000 | binlog.enable | false | ... @@ -73,7 +72,6 @@ SHOW CONFIG LIKE 'tidb'; | Type | Instance | Name | Value | +------+----------------+-------------------------------------------------+---------------------------------------------------------------------+ | tidb | 127.0.0.1:4000 | advertise-address | 127.0.0.1 | -| tidb | 127.0.0.1:4000 | alter-primary-key | false | | tidb | 127.0.0.1:4000 | binlog.binlog-socket | | | tidb | 127.0.0.1:4000 | binlog.enable | false | ... diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index 6a35adba70d8..cd26e423f32d 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -89,12 +89,16 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ + 将旧表中的 utf8 字符集当成 utf8mb4的开关。 + 默认值:true -### `alter-primary-key` +### `alter-primary-key`(已废弃) + 用于控制添加或者删除主键功能。 + 默认值:false + 默认情况下,不支持增删主键。将此变量被设置为 true 后,支持增删主键功能。不过对在此开关开启前已经存在的表,且主键是整型类型时,即使之后开启此开关也不支持对此列表删除主键。 +> **注意:** +> +> 该配置项不再生效。如果需要增删主键,请使用 `NONCLUSTERED` 代替。要了解关于 `CLUSTERED` 主键的详细信息,请参考[聚簇索引](/clustered-indexes.md)。 + ### `server-version` + 用来修改 TiDB 在以下情况下返回的版本号: diff --git a/troubleshoot-hot-spot-issues.md b/troubleshoot-hot-spot-issues.md index 86242980b15e..e1896dd2332e 100644 --- a/troubleshoot-hot-spot-issues.md +++ b/troubleshoot-hot-spot-issues.md @@ -100,7 +100,7 @@ ALTER TABLE:ALTER TABLE t SHARD_ROW_ID_BITS = 4; `SHARD_ROW_ID_BITS` 的值可以动态修改,每次修改之后,只对新写入的数据生效。 -TiDB `alter-primary-key` 参数设置为 false 时,会使用表的整数型主键作为 RowID,因为 `SHARD_ROW_ID_BITS` 会改变 RowID 生成规则,所以此时无法使用 `SHARD_ROW_ID_BITS` 选项。在 `alter-primary-key` 参数设置为 true 时,TiDB 在建表时不再使用整数型主键作为 RowID,此时带有整数型主键的表也可以使用 `SHARD_ROW_ID_BITS` 特性。 +对于含有 `CLUSTERED` 主键的表,TiDB 会使用表的主键作为 RowID,因为 `SHARD_ROW_ID_BITS` 会改变 RowID 生成规则,所以此时无法使用 `SHARD_ROW_ID_BITS` 选项。而对于使用 `NONCLUSTERED` 主键的表,TiDB 会使用自动分配的 64 位整数作为 RowID,此时也可以使用 `SHARD_ROW_ID_BITS` 特性。要了解关于 `CLUSTERED` 主键的详细信息,请参考[聚簇索引](/clustered-indexes.md)。 以下是两张无主键情况下使用 `SHARD_ROW_ID_BITS` 打散热点后的流量图,第一张展示了打散前的情况,第二张展示了打散后的情况。