mysql更改数据语句6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句(1)
ALTER TABLE 語句
ALTER TABLE更改表的結構。例如,可以添加或刪除列、創建或銷毀索引、更改現有列的類型、重命名列或表本身。還可以更改表特性,例如用于表或表注釋的存儲引擎。
●要使用ALTER TABLE,需要表的ALTER、CREATE和INSERT權限。重命名表需要對舊表執行ALTER和DROP操作,對新表執行ALTER、CREATE和INSERT操作。
●在表名之后,指定要進行的更改。如果沒有給定值,ALTER TABLE將不執行任何操作。
●許多允許更改的語法與CREATE TABLE語句的子句類似。column_definition 子句對ADD和CHANGE使用與CREATE TABLE相同的語法。
●COLUMN是可選的,可以省略,但RENAME COLUMN除外(用于區分列重命名操作和表重命名操作)。
●一個ALTER TABLE語句中允許有多個ADD、ALTER、DROP和CHANGE子句,用逗號分隔。這是一個MySQL對標準SQL的擴展,標準SQL只允許每個ALTER TABLE語句有其中一個子句。例如,要在一個語句中刪除多個列,請執行以下操作:
● 如果存儲引擎不支持要進行的ALTER TABLE操作,則會出現警告。可以用SHOW WARNINGS語句來顯示這些警告。
● MySQL 8.0.17及更高版本的InnoDB支持使用key_part規范在JSON列上添加多值索引,可以采用(CAST json_path AS type ARRAY)這個形式。
● 使用mysql_info() C API函數,可以查出ALTER TABLE復制了多少行。
本節還對ALTER TABLE語句的以下主題中進行了描述:
Table 選項
table_options 指定了類似于可以在CREATE TABLE語句中使用的表選項,例如ENGINE、AUTO_INCREMENT、AVG_ROW_LENGTH、MAX_ROWS、ROW_FORMAT或TABLESPACE。
但是,ALTER TABLE在作為表選項給出時會忽略DATA DIRECTORY 和 INDEX DIRECTORY。ALTER TABLE只允許它們作為分區選項,并且要求具有FILE權限。
在ALTER TABLE中使用表選項可以方便地更改單個表的特性。例如:
● 如果t1當前不是InnoDB表,則此語句將其存儲引擎更改為InnoDB:
■ 指定ENGINE子句時,ALTER TABLE將重建該表。即使表已經具有指定的存儲引擎,也是如此。
■ 對現有的INNODB表運行ALTER TABLE tbl_name ENGINE=INNODB 語句會產生一個 "null" ALTER TABLE操作,該操作可用于對INNODB表進行碎片整理。對InnoDB表執行ALTER TABLE tbl_name FORCE,會產生同樣的作用。
■ ALTER TABLE tbl_name ENGINE=INNODB和ALTER TABLE tbl_name FORCE使用聯機DDL。
■ 更改表的存儲引擎的結果受所需存儲引擎是否可用以及NO_ENGINE_SUBSTITUTION SQL模式的設置的影響。
■ 為了防止意外的數據丟失,ALTER TABLE不能將表的存儲引擎更改為MERGE或BLACKHOLE。
● 將InnoDB表更改為使用壓縮行存儲格式:
● ENCRYPTION子句為InnoDB表啟用或禁用頁級數據加密。必須安裝和配置keyring插件才能啟用加密。
如果啟用table_encryption_privilege_check變量,則需要TABLE_ENCRYPTION_ADMIN權限才能使用ENCRYPTION子句設置與默認模式不同的加密設置。
在MySQL8.0.16之前,只有在改變駐留在獨立表空間(file-per-table tablespaces)中的表時,才支持ENCRYPTION子句。從MySQL8.0.16開始,對于駐留在常規表空間中的表也支持ENCRYPTION子句。
對于駐留在常規表空間中的表,表和表空間加密必須匹配。
在沒有顯式指定ENCRYPTION子句的情況下,不允許通過將表移動到其他表空間或更改存儲引擎來更改表加密。
從MySQL 8.0.16開始,如果表使用不支持加密的存儲引擎,則不允許使用'N'或''以外的值指定ENCRYPTION子句。此前,該子句是接受的。也不允許使用不支持加密的存儲引擎在啟用加密的模式中創建沒有ENCRYPTION子句的表。
● 重置當前自動增量值:
不能將計數器重置為小于或等于當前使用的值。對于InnoDB和MyISAM,如果該值小于或等于AUTO_INCREMENT列中當前的最大值,則該值將重置為當前最大AUTO_INCREMENT列值加1。
● 更改默認表字符集:
● 添加(或更改)表注釋:
● 使用帶有TABLESPACE選項的ALTER TABLE語句在現有的常規表空間、獨立表空間和系統表空間之間移動InnoDB表。
■ ALTER TABLE ... TABLESPACE操作總是會導致完整的表重建,即使TABLESPACE屬性沒有改變以前的值。
■ ALTER TABLE ... TABLESPACE語法不支持將表從臨時表空間移動到持久表空間。
■ CREATE TABLE ... TABLESPACE支持DATA DIRECTORY子句,ALTER TABLE ... TABLESPACE不支持,如果指定,則忽略。
● MySQL NDB Cluster 8.0支持設置NDB_TABLE選項,用于控制表的分區平衡、從任何副本讀取、完全主從復制,或這些控制的任意組合,這個設置是ALTER TABLE語句的表注釋的一部分,其方式與CREATE TABLE語句中的方式相同,如下例所示:
請記住,ALTER TABLE ... COMMENT ...放棄表的任何現有注釋。
● ENGINE_ATTRIBUTE和SECONDARY_ENGINE_ATTRIBUTE選項(從MySQL 8.0.21開始提供)用于指定主存儲引擎和輔助存儲引擎的表、列和索引屬性。這些選項保留供將來使用。不能更改索引屬性。必須刪除一個索引并將其添加回所需的更改,這可以在單個ALTER TABLE語句中執行。
若要驗證表選項是否按預期更改,請使用SHOW CREATE TABLE或查詢INFORMATION_SCHEMA.TABLES表。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的mysql更改数据语句6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 更新:苹果确认 RCS 信息仍显示为绿色
- 下一篇: 主板上的"CLEAR CMOS"是什么意