Skip to content

Commit

Permalink
*: remove alter-primary-key configuration (#5774) (#5794)
Browse files Browse the repository at this point in the history
  • Loading branch information
ti-srebot authored Mar 24, 2021
1 parent 0d23ae8 commit 0934290
Show file tree
Hide file tree
Showing 10 changed files with 35 additions and 12 deletions.
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

0 comments on commit 0934290

Please sign in to comment.