すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for OceanBase (Deprecated):ALTER TABLE の非互換性

最終更新日:Jan 19, 2025

このトピックでは、MySQL データベースで実行された ALTER TABLE DDL 操作がデータ転送サービスの DDL 同期コンポーネントによって変換できるものの、MySQL データベースから OceanBase Database の MySQL テナントへのデータ移行中に OceanBase Database の MySQL テナントでは実行できないシナリオについて説明します。

行 CHECK 式での他の列の参照

  • MySQL データベース

    • ALTER TABLE ADD COLUMN 文を実行する場合、行 CHECK 式で他の列(どの型でも)を参照することはできません。

    • ALTER TABLE MODIFY/CHANGE COLUMN 文を実行する場合、行 CHECK 式で他の列(どの型でも)を参照できます。

  • OceanBase Database の MySQL テナント

    • ALTER TABLE ADD COLUMN 文を実行する場合、行 CHECK 式で他の列(どの型でも)を参照することはできません。

    • ALTER TABLE MODIFY/CHANGE COLUMN 文を実行する場合、行 CHECK 式で他の列(どの型でも)を参照することはできません。

      重要

      OceanBase Database の MySQL テナントの制限により、他の CHECK 式はサポートされない場合があります。

列の型の変更

  • MySQL データベースと OceanBase Database の MySQL テナントでは、変更後の制約付き列の型に異なる制限があります。詳細については、「制約付き列の型を変更する」をご参照ください。

  • MySQL データベースと OceanBase Database の MySQL テナントでは、制約のない列の型に異なる制限があります。詳細については、「制約のない列の型を変更する」をご参照ください。

列の長さの変更

  • MySQL データベースと OceanBase Database の MySQL テナントでは、変更後の制約付き列の長さに異なる制限があります。詳細については、「制約付き列の長さを変更する」をご参照ください。

  • MySQL データベースと OceanBase Database の MySQL テナントでは、変更後の制約のない列の長さに異なる制限があります。詳細については、「制約のない列の長さを変更する」をご参照ください。

NULLABLE 列を NOT NULL 列に変更する

  • MySQL データベース

    NULLABLE 列に制約がない場合、CHANGE/MODIFY COLUMN 文を実行して NULLABLE 列を NOT NULL 列に変更できます。NOT NULL -> NULLABLE、NULLABLE -> NULLABLE、NOT NULL -> NOT NULL の変更もサポートされています。

    重要

    NULLABLE 列に NULL 値が存在する場合、NULLABLE 列を NOT NULL 列に変更することはできません。

  • OceanBase Database の MySQL テナント

    • NULLABLE 列に制約がない場合、CHANGE/MODIFY COLUMN 文を実行して NULLABLE 列を NOT NULL 列に変更することはできません。

    • NULLABLE 列に制約がない場合、NOT NULL -> NULLABLE、NULLABLE -> NULLABLE、NOT NULL -> NOT NULL の変更がサポートされています。

文字セットまたは照合順序の変更

  • MySQL データベース:サポートされています。

  • OceanBase Database の MySQL テナント:サポートされていません。

制約付き列の削除

MySQL データベースと OceanBase Database の MySQL テナントでは、制約付き列の削除に関して異なる制限があります。詳細については、「制約付き列を削除する」をご参照ください。

CHANGE/MODIFY COLUMN NOT NULL 文と COMMENT 文は同時に存在できない

サンプルコード:

 ALTER TABLE T MODIFY C INT NOT NULL, COMMENT 'INT COLUMN';
  • MySQL データベース

    • 列に制約がない場合、COMMENT 句を含む CHANGE/MODIFY COLUMN 文を実行して、列を NOT NULL または NULLABLE 列に変更できます。

    • 列に PRIMARY KEY、UNIQUE KEY、KEY、または FULLTEXT 制約がある場合、COMMENT 句を含む CHANGE/MODIFY COLUMN 文を実行して、列を NOT NULL 列に変更できます。ただし、この場合に列を NULLABLE 列に変更すると、エラーが返されます。

  • OceanBase Database の MySQL テナント

    • NULLABLE 列または NOT NULL 列に制約があるかどうかに関係なく、COMMENT 句を含む CHANGE/MODIFY COLUMN 文を実行して NOT NULL 列に変更することはできません。

    • NULLABLE 列または NOT NULL 列に制約がない場合、NULLABLE 列に変更できます。

    • NOT NULL 列に PRIMARY KEY、UNIQUE KEY、KEY、または FULLTEXT 制約があり、COMMENT 句を含む CHANGE/MODIFY COLUMN 文を実行して列を NULLABLE 列に変更する場合、エラーは返されませんが、変更は有効になりません。