> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Schema 变更传播支持

> 说明 ClickPipes 可在源表中检测到的 schema 变更类型的页面

MySQL 的 ClickPipes 可以检测源表中的 schema 变更，并且在某些情况下会自动将这些变更传播到目标端表。下文说明了各类 DDL 操作的处理方式：

[//]: # "TODO 补充此页面：rename、数据类型变更以及 truncate 的处理行为，并提供如何处理不兼容 schema 变更的指导。"

| Schema 变更类型                                          | 行为                                                         |
| ---------------------------------------------------- | ---------------------------------------------------------- |
| 添加新列 (`ALTER TABLE ADD COLUMN ...`)                  | 自动传播。schema 变更后复制的所有行都会包含新列                                |
| 添加带默认值的新列 (`ALTER TABLE ADD COLUMN ... DEFAULT ...`) | 自动传播。schema 变更后复制的所有行都会包含新列，但现有行只有在执行完整的表 refresh 后才会显示默认值 |
| 删除现有列 (`ALTER TABLE DROP COLUMN ...`)                | 可以检测到，但**不会**传播。对于 schema 变更后复制的所有行，被删除的列将填充为 `NULL`       |

<Note>
  当前不支持在 snapshot 期间添加列。建议的变通方法是在计划中的 schema 变更之前或之后执行 snapshot；或者，如果 ClickPipe 已经失败，可手动向目标端表添加一个类型合适的列。
</Note>

<div id="mysql-5-limitations">
  ### MySQL 5.x 限制
</div>

早于 [8.0.1](https://dev.mysql.com/blog-archive/more-metadata-is-written-into-binary-log/) 的 MySQL 版本不会在 binlog 中包含完整的列元数据 (`binlog_row_metadata=FULL`) ，因此 ClickPipes 会按列的序号跟踪列。这意味着：

* **在末尾添加列** (`ALTER TABLE ADD COLUMN ...`) 受支持。
* **任何会导致列位置移位的 DDL** 都会导致管道报错，因为届时将无法再可靠地按序号进行映射。这包括：
  * `ALTER TABLE DROP COLUMN ...`
  * `ALTER TABLE ADD COLUMN ... AFTER ...` / `FIRST`
  * `ALTER TABLE MODIFY COLUMN ... AFTER ...` / `FIRST`
  * `ALTER TABLE CHANGE COLUMN ... AFTER ...` / `FIRST`

如果遇到此错误，您需要重新同步该管道。
