修改[online | offline] [ignore]表tbl_name[alter_specification(,alter_specification)……] [partition_options]alter_specification:table_options|添加(列)col_namecolumn_definition(第一个|col_name|添加[列](col_namecolumn_definition| add{索引|键}[index_name] [index_type)(index_col_name,……)index_option)……| add [constraint]象征主键[index_type)(index_col_name,……)index_option)……| add [constraint]象征[索引|键][index_name] [index_type)(index_col_name,……)index_option)……|添加全文[索引|键][index_name)(index_col_name,……)index_option)……| add spatial[索引|键][index_name)(index_col_name,……)index_option)……| add [constraint]象征]]外键[index_name)(index_col_name,……)reference_definition| algorithm [=] {default | inplace | copy} | alter [column]col_name{设置默认文字| drop default}old_col_namenew_col_namecolumn_definition(第一个|col_name| lock [=] {default | none | shared | exclusive} | modify [column]col_namecolumn_definition(第一个|col_name| drop[列]col_name删除主键|index_name|删除外键fk_symbol|禁用键|启用键| rename [to | as]new_tbl_name|命令col_name(,col_name)……|转换为字符集charset_name(核对collation_name| [default]字符集[=]charset_name(核对(=)collation_name删除表空间导入表空间partition_definition) |删除分区partition_names截断分区{partition_names| all} |合并分区数量|重组分区partition_names到(partition_definitions) |交换分区partition_name与表tbl_name分析分区partition_names| all} |检查分区{partition_names|优化分区{partition_names|重建分区{partition_names|修复分区{partition_names|删除分区index_col_name:col_name((长度[asc | desc]index_type:使用{btree | hash}index_option: KEY_BLOCK_SIZE (=)价值|index_type|与解析器parser_name|评论”字符串'table_options:table_option[[,]table_option)……(参见CREATE TABLE选项)partition_options:(参见CREATE TABLE选项)
ALTER TABLE
は,テブルの構造を変更します。たとえば,カラムを追加または削除したり、インデックスを作成または破棄したり、既存のカラムの型を変更したり、カラムまたはテーブル自体の名前を変更したりできます。また、テーブルに使用されているストレージエンジンやテーブルのコメントなどの特性を変更することもできます。
テブル名のあとに,行う変更を指定します。何も指定されていない場合,ALTER TABLE
は何もしません。
許可される多くの変更の構文は,创建表
ステトメントの各句に似ています。詳細は,セクション13.1.17 " create table構文"を参照してください。
table_options
は,引擎
、AUTO_INCREMENT
、AVG_ROW_LENGTH
、MAX_ROWS
、ROW_FORMAT
などの,创建表
ステトメントで使用できる種類のテブルオプションを示します。すべてのテブルオプションのリストと各オプションの説明にいては,セクション13.1.17 " create table構文"を参照してください。ただし,ALTER TABLE
は,数据目录
および索引目录
テブルオプションを無視します。
partition_options
は,再パーティション化,パーティションの追加,削除,マージ,および分割,パーティション化の保守の実行などのために,パーティション化されたテーブルで使用できるオプションを示します。ALTER TABLE
ステトメントには,ほかの変更指定に加えて,分区的
または删除分区
句を含めることができますが,分区的
または删除分区
句は,ほかのどの指定よりもあとの最後に指定する必要があります。添加分区
、删除分区
、合并分区
、重组分区
、交换分区
、分析分区
、检查分区
,および修复分区
オプションは,個々のパティションに対して機能するため,1ALTER TABLE
内でほかの変更指定と組み合わせることはできません。パティションのオプションの詳細は,セクション13.1.17 " create table構文"およびセクション13.1.7.1 " alter tableパティション操作"を参照してください。ALTER TABLE……交换分区
ステトメントの詳細および例にいては,セクション19.3.1 " rangeおよびlistパティションの管理"を参照してください。
操作によっては,ストレージエンジンがその操作をサポートしていないテーブルに対して試行されると,警告が生成される場合があります。これらの警告は,显示警告
で表示できます。セクション13.7.5.41 " show warnings構文"を参照してください。
ALTER TABLE
のトラブルシュティングにいては,セクションb.5.7.1 " alter tableでの問題"を参照してください。
ストレジ,パフォマンス,および並列性に関する考慮事項
ほとんどの場合,ALTER TABLE
は元のテブルの一時的なコピを作成します。米ySQL は、そのテーブルを変更しているほかの操作を待ってから、処理を続行します。そのコピーに変更を組み込み、元のテーブルを削除したあと、新しいテーブルの名前を変更します。ALTER TABLE
の実行中,ほかのセッションは元のテーブルを読み取ることができます(例外については,すぐあとに説明します)。ALTER TABLE
操作の開始後に開始されたテーブルへの更新や書き込みは,新しいテーブルの準備ができるまで停止されてから,どの更新も失敗することなく,新しいテーブルに自動的にリダイレクトされます。元のテブルの一時的なコピは,新しいテスディレクトリ内に作成されます。これは,テブルの名前を別のデタベスに変更したALTER TABLE
操作のための元のテブルのデタベスディレクトリとは異なる場合があります。
前に触れた例外とは,ALTER TABLE
が,テブルの.frm
ファイルの新しいバージョンをインストールし,古いファイルを破棄して,テーブルおよびテーブル定義キャッシュから古くなったテーブル構造をクリアする準備ができた時点で(書き込みだけでなく)読み取りをブロックすることです。この時点で,このステトメントは排他的ロックを取得する必要があります。それを行うために,現在の読み取り側が完了するのを待って,新しい読み取り(および書き込み)をブロックします。
MyISAM
テブルの場合は,myisam_sort_buffer_size
システム変数を大きな値に設定することによって,インデックスの再作成(変更プロセスのもっとも遅い部分)を高速化できます。
一部の操作では,一時テALTER TABLE
が可能です。
ALTER TABLE
をほかのオプションなしで実行すると,MySQLは単純に,コピを作成することなく,テブルtbl_name
重命名为new_tbl_name
tbl_name
に対応するすべてのファ邮箱ルの名前を変更します。(重命名表
ステトメントを使用してテブルの名前を変更することもできます。セクション13.1.32 " rename table構文"を参照してください)名前変更されたテーブル専用に付与された権限は,どれも新しい名前には移行されません。それらは,手動で変更する必要があります。サバが変更する必要があるのはテブルの内容ではなく,テ
.frm
ファイルだけであるため,テーブルデータを変更せず,テーブルメタデータだけを変更する変更はただちに実行されます。次の変更は,この方法で実行できる迅速な変更です。カラムの名前変更。ただし,米ySQL 5.6.6 より前の
InnoDB
ストレジエンジンを除きます。カラムのデフォルト値の変更(
NDB
テブルを除きます。「MySQL集群オンラMySQL集群ン操作の制限を参照してください)。有効なメンバ値のリストの最後に新しい列挙またはセットメンバを追加することによる,
枚举
または集
カラムの定義の変更。ただし,デタ型のストレージサイズが変更される場合を除きます。たとえば、メンバー数が 8 の集
カラムにメンバーを追加すると,値ごとに必要なストレージが1バイトから2バイトに変更されます。これには,テブルコピが必要になります。リストの途中にメンバを追加すると,既存のメンバの番号が変更されます。これには,テブルコピが必要になります。
添加分区
、删除分区
、合并分区
、重建分区
,または重组分区
を含むALTER TABLE
は,一時テブルを作成しません(NDB
テブルで使用される場合を除きます)。ただし,これらの操作では、一時的なパーティションファイルが作成されます。范围
または列表
パティションに対する添加
または下降
操作は即座の操作か,ほぼ即座の操作です。哈希
または关键
パティションに対する添加
または合并
操作では,线性散列
または线性关键
が使用されていないかぎり,すべてのパティション間でデタがコピされます。添加
または合并
操作はパティションごとに実行されますが,これは実質的に,新しいテブルの作成と同じです。重组
操作では変更されたパティションのみがコピされ,変更されていないものはそのままです。ンデックスの名前変更。
InnoDB
を除きます。InnoDB
とNDB
に対する邮箱ンデックスの追加または削除。
old_alter_table
システム変数を在
に設定するか,またはalter_specification
句の1として算法=复制
を指定することによって,通常であればテブルコピを必要としないALTER TABLE
操作で強制的に(MySQL 5.0でサポートされている)一時テーブルの方法を使用するようにできます。old_alter_table
設定と,默认的
以外の値を持算法
句の間に矛盾がある場合は,算法
句が優先されます。(算法=违约
は,算法
句をまったく指定しないのと同じです。)
算法=原地
を指定すると,それをサポートする句やストレージエンジンに対してインプレースの手法が使用されるようになり,サポートされていない場合はエラーで失敗します。そのため,予測していたものとは異なるストレージエンジンを使用するテーブルを変更しようとした場合の非常に長いテーブルコピーが回避されます。InnoDB
テブルに対するオンランDDLに,セクション14.11 " InnoDBとオンラereplicationンDDL "を参照してください。
MySQL 5.6.16では,ALTER TABLE
は,添加一列
、改变列
、修改列
、添加索引
,および力
操作に関して,古い時間カラムを5.6形式にアップグレドします。テブルを再構築しなければならないため,この変換は原地
アルゴリズムを使用して実行することはできません。そのため,これらの場合に算法=原地
を指定するとエラになります。必要であれば,算法=复制
を指定します。
MySQL 5.6.22から,テブルを关键
によってパティション化するために使用されるマルチカラムALTER TABLE
操作は、この操作によってカラムの順序が変更される場合はオンラ以及ンで実行できません。このような場合は,代わりに,コピ,するALTER TABLE
を使用する必要があります。(Bug #17896265)
MySQL集群はオンラMySQL集群ンALTER TABLE
操作もサポトしていますが,算法=原地
構文を受け入れないため,代わりに在线
キワドが使用されます。在线
および离线
キワドは,MySQL集群でのみサポトされます。これらのキワドは,MySQL集群NDB 7.3から非推奨です。米ySQL Cluster NDB 7.4 では引き続きサポートされますが、将来のバージョンの MySQL Cluster で削除される可能性があります。正確な構文およびその他の詳細については、セクション13.1.7.2“MySQL集群でのALTER TABLEオンライン操作“を参照してください。
锁
句を使用すると,変更中のテブルの並列読み取りおよび書き込みのレベルを制御できます。この句にデフォルト以外の値を指定すると,変更操作中に特定の量の並列アクセスまたは排他性が要求されるようにすることが可能であり,要求されたレベルのロックを使用できない場合は操作が停止されます。锁
句のパラメタは次のとおりです。
锁=违约
指定された
算法
句(存在する場合)およびALTER TABLE
操作に対する最大レベルの並列性:サポートされている場合は,並列読み取りおよび書き込みを許可します。そうでない場合,サポ,トされている場合は,並列読み取りを許可します。そうでない場合は,排他的アクセスを適用します。锁=没有
サポトされている場合は,並列読み取りおよび書き込みを許可します。そうでない場合は,エラメッセジを返します。
锁=共享
サポトされている場合は,並列読み取りを許可しますが,書き込みはブロックします。書き込みは,指定された
算法
句(存在する場合)およびALTER TABLE
操作に対して,並列書き込みがストレジエンジンによってサポトされている場合でもブロックされます。並列読み取りがサポトされていない場合は,エラジを返します。锁=独家
排他的アクセスを適用します。これは,指定された
算法
句(存在する場合)およびALTER TABLE
操作に対して,並列読み取り/書き込みがストレージエンジンによってサポートされている場合でも実行されます。
MySQL 5.6.3の時点では,ALTER TABLE
を使用して,テブルを再構築する「零」変更操作を実行することもできます。以前は,tbl_name
力力
オプションは認識されましたが,無視されました。MySQL 5.6.17の時点では,オンラ帐号帐号ンDDLのサポトは力
オプションに対して提供されます。詳細は,セクション14.11.1 "オンラereplicationンDDLの概要"を参照してください。
NDB
テーブルの場合,可変幅カラム上のインデックスを追加および削除する操作は,そのほとんどの期間,テーブルコピーを行なったり,並列DMLアクションをブロックしたりすることなくオンラインで実行されます。セクション13.1.7.2“MySQL集群でのALTER TABLEオンライン操作“を参照してください。
使用上の注意
ALTER TABLE
を使用するには,このテブルに対する改变
、创建
,および插入
権限が必要です。テブルを名前変更するには、古いテーブル側で改变
および下降
と,新しいテブル側で改变
、创建
,および插入
権限が必要です。忽略
は,標準SQLへのMySQL拡張です。これは,新しいテーブル内の一意のキーに関して重複が存在する場合や、厳密モードが有効になっているときに警告が発生した場合のALTER TABLE
の動作を制御します。忽略
が指定されていない場合は,重複キエラが発生すると,コピは中止され,ロルバックされます。忽略
が指定されている場合は,一意のキ1行だけが使用されます。その他の競合している行は削除されます。正しくない値は,もっとも近い一致する許容可能な値に切り捨てられます。MySQL 5.6.17の時点では,
忽略
句は非推奨であり,使用すると警告が生成されます。MySQL 5.7では;忽略
は削除されます。テブルが書き込みロックされているときに,そのテブル構造を変更するために
ALTER TABLE
が使用されると,保留中の插入延迟
ステトメントは失われます。table_option
は,引擎
、AUTO_INCREMENT
、AVG_ROW_LENGTH
、MAX_ROWS
、ROW_FORMAT
などの,创建表
ステトメントで使用できる種類のテブルオプションを示します。すべてのテブルオプションのリストと各オプションの説明にいては,セクション13.1.17 " create table構文"を参照してください。ただし,ALTER TABLE
は,数据目录
および索引目录
テブルオプションを無視します。たとえば,テブルを
InnoDB
テブルになるように変換するには,次のステトメントを使用します。ALTER TABLE t1 ENGINE = InnoDB;
テブルを
InnoDB
ストレジエンジンに切り替えるときの考慮事項にいては,セクション14.6.4 " MyISAMからInnoDBへのテブルの変換"を参照してください。引擎
句を指定すると,ALTER TABLE
はテブルを再構築します。これは,そのテーブルに指定されたストレージエンジンがすでに存在する場合にも当てはまります。既存の
InnoDB
テブルに対してALTER TABLE
を実行すると,「零」tbl_name
引擎= INNODBALTER TABLE
操作が実行されます。これは,セクション14.10.4 "テブルのデフラグ"で説明されているように,InnoDB
テブルのデフラグに使用できます。InnoDB
テブルに対してALTER TABLE
を実行しても,同じ機能が実行されます。tbl_name
力MySQL 5.6.17の時点では,
ALTER TABLE
とtbl_name
引擎= INNODBALTER TABLE
の両方がオンラ帐号帐号ンDDL(tbl_name
力算法=复制
を使用します。詳細は,セクション14.11.1 "オンラereplicationンDDLの概要"を参照してください。テブルのストレジエンジンを変更しようとすると,セクション5.1.7 "サバSQLモド"で説明されているように,その結果は目的のストレ,ジエンジンが使用可能かどうかや,
NO_ENGINE_SUBSTITUTION
SQLモドの設定によって影響を受けます。デタが誤って失われることのないように,
ALTER TABLE
を使用して,テブルのストレジエンジンを合并
または黑洞
に変更することはできません。新しい行に使用される
AUTO_INCREMENT
カウンタの値を変更するには,次のようにします。修改表t2 AUTO_INCREMENT =价值;
このカウンタを,現在使用されている値以下の値にリセットすることはできません。
InnoDB
とMyISAM
のどらの場合も,この値が現在AUTO_INCREMENT
カラム内にある最大値以下である場合,この値は現在のAUTO_INCREMENT
カラムの最大値に1を加えた値にリセットされます。1つの
ALTER TABLE
ステトメントで,カンマで区切られた複数の添加
、改变
、下降
,および改变
句を発行できます。これは,ALTER TABLE
ステトメントごとに各句が1しか許可されない標準SQLへのMySQL拡張です。たとえば,1のステトメントで複数のカラムを削除するには,次のようにします。删除列c,删除列d
改变
、col_name
下降
,およびcol_name
指数下降
は,標準SQLへのMySQL拡張です。ワード
列
はオプションであり,省略できます。column_definition
句は,添加
と改变
に対して,创建表
に対するのと同じ構文を使用します。セクション13.1.17 " create table構文"を参照してください。改变
句を使用して,カラムの名前を変更できます。それを行うには,古いカラム名と新しいカラム名,およびそのカラムの現在の定義を指定します。たとえば,old_col_name
new_col_name
column_definition
整数
カラムの名前を一个
からb
に変更するには,次のように行うことができます。ALTER TABLE t1 CHANGE a b INTEGER;
カラムの名前を変更せずに,その型を変更するには,古いカラム名と新しいカラム名が同じ場合でも,
改变
構文にはそれらの名前が引き続き必要です。例:修改表t1
修改
を使用しても,カラムの名前を変更せずに,その型を変更できます。修改表t1的BIGINT NOT NULL;
修改
は,Oracleの互換性のためのALTER TABLE
への拡張です。改变
または修改
を使用する場合は,column_definition
に,デタ型および主键
や独特的
などのンデックス属性以外の,新しいカラムに適用されるすべての属性を含める必要があります。元の定義には存在するが,新しい定義として指定されていない属性は引き継がれません。カラムcol1
が'我的列'
として定義されているときに,このカラムを次のように変更するとします。修改表t1的BIGINT值
結果として得られるカラムは
长整型数字
として定義されますが,属性'我的专栏'
は含まれません。これらを保持するには,ステトメントを次のようにしてください。ALTER TABLE t1 MODIFY col1 BIGINT UNSIGNED DEFAULT 1 COMMENT 'my column';
改变
または修改
を使用してデータ型を変更すると,MySQLは,既存のカラム値を新しい型にできるだけ変換しようとします。警告この変換によって,デタが変更される可能性があります。たとえば,文字列カラムを短くすると、値が切り捨てられる可能性があります。新しいデータ型への変換によってデータが失われる場合は操作が成功しないようにするには、
ALTER TABLE
を使用する前に厳密なSQLモモドを有効にします(セクション5.1.7 "サバSQLモド"を参照してください)。テブル行内の特定の位置にカラムを追加するには,
第一个
または后
を使用します。デフォルトでは,そのカラムを最後に追加します。また,col_name
改变
または修改
操作で第一个
と后
を使用して,テブル内のカラムを並べ替えることもできます。改变设置默认
または改变降低违约
は,それぞれ,カラムの新しいデフォルト値を指定するか,または古いデフォルト値を削除します。古いデフォルトが削除され,かカラムを零
にできる場合,新しいデフォルトは零
です。カラムを零
にできない場合,MySQLは,セクション11.6 "デタ型デフォルト値"で説明されているようにデフォルト値を割り当てます。指数下降
は,ンデックスを削除します。これは,標準 SQL への MySQL 拡張です。セクション13.1.24 " drop index構文"を参照してください。ンデックス名に確信がない場合は,显示指数从
を使用します。tbl_name
テーブルからカラムが削除された場合,そのカラムは,それが含まれているすべてのインデックスからも削除されます。ereplicationンデックスを構成するすべてのカラムが削除された場合は、そのereplicationンデックスも削除されます。
改变
または修改
を使用して,インデックスが存在するカラムを短くしたときに,結果として得られるカラムの長さがインデックスの長さより短くなった場合,MySQLは自動的にそのインデックスを短くします。テブルに1のカラムしか含まれていない場合は,そのカラムを削除できません。テブルを削除することが目的である場合は,代わりに
删除表
を使用します。删除主键
は,主キーを削除します。主キーが存在しない場合は、エラーが発生します。主キーのパフォーマンス特性 (特にInnoDB
テブルの場合)に,セクション8.3.2 "主キの使用"を参照してください。テブルに
唯一索引
または主键
を追加すると,重複キーをできるだけ早く検出できるようにするために,MySQLはそれを一意でないどのインデックスよりも前に格納します。一部のストレジエンジンでは,。
index_type
指定子の構文は,使用
です。type_name
使用
の詳細は,セクション13.1.13 " create index構文"を参照してください。推奨される位置は,カラムリストのあとです。このオプションをカラムリストの前に使用するためのサポートは,将来のMySQLリリースで削除される予定です。index_option
値は,ンデックスの追加オプションを指定します。使用
はそのようなオプションの1です。許可されるindex_option
値の詳細は,セクション13.1.13 " create index構文"を参照してください。ALTER TABLE
ステトメントのあとに,情報を更新するために分析表
の実行が必要になることがあります。セクション13.7.5.23 " show index構文"を参照してください。命令
を使用すると,特定の順序で行が含まれる新しいテブルを作成できます。このオプションは主に,ほとんどは特定の順序で行をクエリすることがわかっている場合に役立ます。このオプションをテーブルの大幅な変更のあとに使用すると,パフォーマンスの向上が得られる可能性があります。場合によっては,テーブルが,あとでその並べ替えに使用するカラムごとの順番になっていれば,MySQLでのソートが簡単になることがあります。注記挿入や削除を行うと,このテブルは指定された順序のままではなくなります。
命令
構文では,ソトのためのカラム名を1。その各カラム名に続けて,オプションで,それぞれ昇順または降順のソ,ト順序を示すASC
またはDESC
を指定できます。デフォルトは昇順です。ソト条件として許可されるのはカラム名だけです。任意の式は許可されていません。この句は,ほかのどの句よりもあとの最後に指定するようにしてください。InnoDB
は常に,クラスタ化された邮箱ンデックスに従ってテブル行を並べ替えるため,命令
はInnoDB
テブルでは意味がありません。注記パティション化されたテブルに対して使用されている場合,
ALTER TABLE……命令
は,各パティション内でのみ行を並べ替えます。MyISAM
テブルに対してALTER TABLE
を使用した場合,一意でない邮箱ンデックスはすべて(修理表
として)別のバッチに作成されます。多くのンデックスがあるときは,この方法でALTER TABLE
がはるかに早くなります。MyISAM
テブルの場合は,キの更新を明示的に制御できます。ALTER TABLE……禁用的钥匙
を使用して,一意でないereplicationンデックスの更新を停止するようMySQLに指示します。次に,ALTER TABLE……启用钥匙
を使用して、不足している以及ンデックスを再作成します。MyISAM
はこれを,キーを1つずつ挿入するのに比べてはるかに高速な特殊なアルゴリズムで実行するため,一括挿入操作を実行する前にキーを無効にすると大幅な高速化が得られます。ALTER TABLE……禁用的钥匙
を使用するには,先に説明した権限に加えて指数
権限が必要です。一意でないereplicationンデックスは,無効になっている間,有効なときにはこのereplicationンデックスを使用する
选择
や解释
などのステトメントで無視されます。MySQL 5.6.7より前は,
ALTER TABLE
を使用して外部キカラムの定義を変更すると,参照整合性が失われる可能性がありました。たとえば,零
値を含む外部キカラムを非空
になるように変更すると,零
値が空の文字列になりました。同様に,親テーブル内の行を削除するALTER TABLE忽略
によって,参照整合性が破壊される可能性がありました。5.6.7の時点では,参照整合性が失われる可能性のある外部キーカラムへの変更がサーバーによって禁止されます。また,安全でない可能性のある,このようなカラムのデ,タ型への変更も禁止されます。たとえば,
VARCHAR (20)
のVARCHAR (30)
への変更は許可されますが,それをVARCHAR (1024)
に変更することは,それによって個々の値を格納するために必要なバイト長の数が変更されるため許可されません。回避方法として,カラム定義を変更する前にALTER TABLE……删除外键
を使用し,あとでALTER TABLE……添加外键
を使用します。外键
および参考文献
句は,添加(约束(
を実装している象征
]]外键[index_name
)(…)参考文献(…)InnoDB
およびNDB
ストレジエンジンによってサポトされます。セクション14.6.6 " InnoDBとFOREIGN KEY制約"を参照してください。その他のストレジエンジンでは,これらの句は解析されますが,無視されます。检查
句は,すべてのストレ,ジエンジンによって解析されますが,無視されます。セクション13.1.17 " create table構文"を参照してください。構文の句を受け入れるが,無視する理由は互換性のためです。つまり,ほかのSQLサーバーからコードを移植し,参照によってテーブルを作成するアプリケーションを実行することを容易にするためです。セクション1.7.2 " MySQLと標準SQLとの違い"を参照してください。ALTER TABLE
では,创建表
とは異なり,添加外键
はindex_name
(指定されている場合)を無視し,自動的に生成された外部キ名を使用します。回避方法として,外部キ名を指定する约束
句を含めます。添加约束的名字外键(....)…
重要参照がカラム指定の一部として定義されている邮箱ンラ邮箱ンの
参考文献
指定は,暗黙のうに無視されます。MySQLは,個別の外键
指定の一部として定義されている参考文献
句のみを受け入れます。注記パティション化された
InnoDB
テブルは,外部キトしていません。この制限は,NDB
テブル((线性)的关键
によって明示的にパティション化されたテブルを含む)には適用されません。詳細は,セクション19.6.2 "ストレジエンジンに関連するパティショニング制限"を参照してください。InnoDB
およびNDB
ストレジエンジンは,外部キを削除するためのALTER TABLE
の使用をサポトします。ALTER TABLEtbl_name删除外键fk_symbol;
詳細は,セクション14.6.6 " InnoDBとFOREIGN KEY制約"を参照してください。
MySQL 5.6.6より前は,同じ
ALTER TABLE
ステトメントでの外部キの追加と削除は,問題が発生する場合があるためサポトされていません。操作ごとに個別のステトメントを使用するようにしてください。MySQL 5.6.6の時点では,同じALTER TABLE
ステトメントでの外部キの追加と削除はALTER TABLE……算法=原地
ではサポトされますが,ALTER TABLE……算法=复制
では未サポトのままです。.ibd
ファ邮箱ル内の独自のテ邮箱ブルスペ邮箱スで作成されたInnoDB
テブルの場合は,そのファ,。.ibd
ファルを破棄するには,次のステトメントを使用します。ALTER TABLEtbl_name丢弃表空间;
これにより,現在の
.ibd
ファルが削除されるため,最初にバックアップがあることを確認してください。テーブルスペースファイルが破棄されている間にテーブルの内容を変更しようとすると,エラーが発生します。テブルスペスファルが破棄されている間に,セクション14.11 " InnoDBとオンラereplicationンDDL "に示されているDDL操作を実行できます。バックアップ
.ibd
ファイルを元のテーブルにインポートするには,それをデータベースディレクトリにコピーしてから,次のステートメントを発行します。ALTER TABLEtbl_name进口表空间;
テーブルスペースファイルは,必ずしも,あとでインポートされるサーバー上に作成されている必要はありません。米ySQL 5.6 では、テーブルスペースファイルの別のサーバーからのインポートが機能するのは、両方のサーバーのステータスが GA (General Availablility) であり、かつそれらのバージョンが同じシリーズ内にある場合です。そうでない場合、そのファイルはインポートされるサーバー上に作成されている必要があります。
注記ALTER TABLE……导入表空间
機能は,ンポトされたデタに対して外部キ制約を課しません。セクション14.5.2 " InnoDB File-Per-Tableモド"を参照してください。
テブルのデフォルトの文字セットおよびすべての文字カラム(
字符
、VARCHAR
、文本
)を新しい文字セットに変更するには,次のようなステトメントを使用します。ALTER TABLEtbl_name转换为字符集charset_name(核对collation_name];
このステトメントでは,すべての文字カラムの照合順序も変更されます。使用する照合順序を示す
核对
句を指定しない場合,このステ,トメントは,その文字セットのデフォルトの照合順序を使用します。この照合順序が目的とするテーブル使用に適していない(たとえば,大文字と小文字が区別される照合順序から大文字と小文字が区別されない照合順序に変更されてしまう)場合は,照合順序を明示的に指定します。デタ型が
VARCHAR
か,またはいずれかの文本
型であるカラムに対して,转换为字符集
は,新しいカラムが確実に元のカラムと同じ数の文字を格納できる十分な長さになるように,必要に応じてデータ型を変更します。たとえば,文本
カラムには,そのカラム内の値のバイト長(最大65535)を格納するための2バイト長があります。latin1
文本
カラムの場合は,各文字に1バイトが必要なため,このカラムには最大65535文字を格納できます。このカラムがuse utf8
に変換された場合は,各文字に最大3バイトが必要になる可能性があるため,可能性のある最大の長さは3×65535 = 196605バイトになります。その長さは文本
カラムのバイト長には収まらないため,MySQLはそのデータ型を,バイト長に196605の値を記録できる最小の文字列型である简单
に変換します。同様に,VARCHAR
カラムは简单
に変換される可能性があります。今説明した型のデタ型の変更を回避するには,
转换为字符集
を使用しないでください。代わりに,修改
を使用して個々のカラムを変更します。例:修改latin1_text_col文本字符集utf8;修改表VARCHAR表米)字符集utf8;
转换为字符集二进制
を指定した場合,字符
、VARCHAR
,および文本
カラムは,それぞれ対応するバ邮箱ナリ文字列型(二进制
、VARBINARY
、团
に変換されます。まり,これらのカラムには文字セットが含まれなくなるため,以降の转换为
操作は適用されません。charset_name
が默认的
である場合は,デタベス文字セットが使用されます。警告转换为
操作は,文字セット間でカラム値を変換します。これは,ある文字セット(latin1
など)のカラムがあるが,格納された値が実際には,ほかの何らかの互換性のない文字セット(use utf8
など)を使用している場合に必要なものではありません。この場合は,このようなカラムごとに,次を実行する必要があります。ALTER TABLE t1 CHANGE c1 c1 BLOBALTER TABLE t1 CHANGE c1 TEXT CHARACTER SET utf8
これが機能する理由は,
团
カラムとの間で変換する場合は変換が発生しないためです。テブルのデフォルトの文字セットのみを変更するには,次のステトメントを使用します。
ALTER TABLEtbl_name默认字符集charset_name;
ワード
默认的
はオプションです。デフォルトの文字セットは、あとで (たとえば、ALTER TABLE……添加一列
で)テブルに追加するカラムの文字セットを指定しない場合に使用される文字セットです。
mysql_info ()
C API関数を使用すると,ALTER TABLE
によってコピされた行数,および(忽略
が使用されている場合は)一意のキ値の重複のために削除された行数を確認できます。セクション23.7.7.35 " mysql_info() "を参照してください。