Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

*: remove alter-primary-key configuration (#5774) #5794

Merged
merged 1 commit into from
Mar 24, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion auto-random.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` 同时指定在同一列上。
Expand Down
26 changes: 24 additions & 2 deletions constraints.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)。

## 外键约束

Expand Down
1 change: 0 additions & 1 deletion dynamic-config.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand Down
2 changes: 1 addition & 1 deletion mysql-compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 类型时,不支持更改精度。
Expand Down
2 changes: 1 addition & 1 deletion sql-statements/sql-statement-add-index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)。

## 另请参阅

Expand Down
2 changes: 1 addition & 1 deletion sql-statements/sql-statement-create-index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)。

## 另请参阅

Expand Down
2 changes: 1 addition & 1 deletion sql-statements/sql-statement-drop-index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)。

## 另请参阅

Expand Down
2 changes: 0 additions & 2 deletions sql-statements/sql-statement-show-config.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
...
Expand Down Expand Up @@ -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 |
...
Expand Down
6 changes: 5 additions & 1 deletion tidb-configuration-file.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 在以下情况下返回的版本号:
Expand Down
2 changes: 1 addition & 1 deletion troubleshoot-hot-spot-issues.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` 打散热点后的流量图,第一张展示了打散前的情况,第二张展示了打散后的情况。

Expand Down