共計 2126 個字符,預計需要花費 6 分鐘才能閱讀完成。
這篇文章將為大家詳細講解有關 MySQL5.6 Online DDL 在線狀態是怎么樣的,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
Yes* 和 No* 表明結果依賴于其他一些附加條件:
執行操作
允許 ALGORITHM=INPLACE
是否拷貝表
允許并發 DML
允許并發查詢
備注和注意事項
create index
add index
Yes*
No*
Yes
Yes
對于全文索引,有一些限制,具體看下一行。目前,該操作不是在原地執行,需要拷貝表.
add fulltext index
Yes
No*
No
Yes
創建第一個全文索引涉及到拷貝表,除非有使用 FTS_DOC_ID 列。后面的全文索引則在原地執行。
drop index
Yes
No
Yes
Yes
optimize table
Yes
Yes
Yes
Yes
在 MySQL5.6.17 里使用 ALGORITHM=INPLACE.
如果設置 old_alter_table= 1 或使用 mysqld –skip-new 選項,則使用 ALGORITHM=COPY.
如果表使用了全文索引,則 ALGORITHM=INPLACE 不適用
set default value for column
Yes
No
Yes
Yes
修改.frm 文件,不涉及數據文件
change auto-increment value
Yes
No
Yes
Yes
修改存儲到內存的一個值,不修改數據文件
add foreign key constraint
Yes*
No*
Yes
Yes
禁用 foreign_key_checks, 則可以避免拷貝表
drop forgien key constraing
Yes
No
Yes
Yes
foreign_key_checks 可以禁用或開啟
rename column
Yes*
No*
Yes*
Yes
允許并發 DML,保持相同的數據類型,僅改變字段名
add column
Yes
Yes
Yes*
Yes
增加 auto-increment 字段時不允許 DML 操作.
雖然 ALGORITHM=INPLACE 可以允許,
但是數據要重組,代價比較昂貴.
drop column
Yes
Yes
Yes
Yes
雖然 ALGORITHM=INPLACE 可以允許,
但是數據要重組,代價比較昂貴.
reorder columns
Yes
Yes
Yes
Yes
雖然 ALGORITHM=INPLACE 可以允許,
但是數據要重組,代價比較昂貴.
change ROW_FORMAT
property
Yes
Yes
Yes
Yes
雖然 ALGORITHM=INPLACE 可以允許,
但是數據要重組,代價比較昂貴.
change KEY_BLOCK_SIZE
property
Yes
Yes
Yes
Yes
雖然 ALGORITHM=INPLACE 可以允許,
但是數據要重組,代價比較昂貴.
make column null
Yes
Yes
Yes
Yes
雖然 ALGORITHM=INPLACE 可以允許,
但是數據要重組,代價比較昂貴.
make cplumn not null
Yes*
Yes
Yes
Yes
當 SQL_MODE 為 strict_all_tables, 如果執行的列包含 null,則會執行失敗。
雖然 ALGORITHM=INPLACE 可以允許,
但是數據要重組,代價比較昂貴.
change data type
of column
No
Yes
Yes
Yes
add primary key
Yes*
Yes
Yes
Yes
雖然 ALGORITHM=INPLACE 可以允許,
但是數據要重組,代價比較昂貴.
如果列必須轉換為非空的條件下,
ALGORITHM=INPLACE 是不允許的。
drop primary key
and add other
Yes
Yes
Yes
Yes
當在同一個 alter table 新增主鍵時 ALGORITHM=INPLACE 是允許的. 數據要重組,因此代價比較昂貴.
drop primary key
No
Yes
No
Yes
刪除主鍵但是又不新增主鍵是被限制的
convert character set
No
Yes
No
Yes
如果新的字符編碼不同將會重建表
specify character set
No
Yes
No
Yes
如果新的字符編碼不同將會重建表
rebulid with
force option
Yes
Yes
Yes
Yes
在 MySQL5.6.17 里使用 ALGORITHM=INPLACE.
如果設置 old_alter_table= 1 或使用 mysqld –skip-new 選項,則使用 ALGORITHM=COPY.
如果表使用了全文索引,則 ALGORITHM=INPLACE 不適用
rebulid with
“null”
alter table …
engine=innodb
Yes
Yes
Yes
Yes
在 MySQL5.6.17 里使用 ALGORITHM=INPLACE.
如果設置 old_alter_table= 1 或使用 mysqld –skip-new 選項,則使用 ALGORITHM=COPY.
如果表使用了全文索引,則 ALGORITHM=INPLACE 不適用
關于 MySQL5.6 Online DDL 在線狀態是怎么樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。