日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)...

發(fā)布時間:2023/12/15 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

添加和刪除列

使用ADD向表中添加新列,使用DROP刪除現(xiàn)有列。DROP col_name是對標(biāo)準(zhǔn)SQL的MySQL擴(kuò)展。

若要在表行的特定位置添加列,請使用FIRST col_name 或者 AFTER col_name。默認(rèn)情況是添加到最后。

如果表只包含一列,則不能刪除該列。如果您想要刪除表,請使用DROP TABLE語句。

如果從表中刪除列,那么列也將從其所屬的任何索引中刪除。如果組成一個索引的所有列都被刪除,那么這個索引也會被刪除。如果使用CHANGE或MODIFY縮短存在索引的列,而結(jié)果列長度小于索引長度,MySQL會自動縮短索引。

對于ALTER TABLE ... ADD,如果列具有使用非確定性函數(shù)的表達(dá)式默認(rèn)值,則語句可能會產(chǎn)生警告或錯誤。

重命名、重新定義和重新排序列

CHANGE、MODIFY、RENAME COLUMN 和 ALTER子句允許更改現(xiàn)有列的名稱和定義。它們具有以下比較特征:

●CHANGE:

■ 可以重命名列并更改其定義。

■ 具有比MODIFY、RENAME COLUMN更多的功能,但以犧牲某些操作的便利性為代價。如果不重命名,CHANGE 需要對列進(jìn)行兩次命名,如果只重命名,則需要重新指定列定義。

■ 使用FIRST或AFTER,可以對列重新排序。

●MODIFY:

■ 可以更改列定義,但不能更改列的名稱。

■ 更改列定義而不重命名比 CHANGE 更方便。

■ 使用FIRST或AFTER,可以對列重新排序。

●RENAME COLUMN:

■ 可以更改列名,但不能更改其定義。

■ 在不更改列定義的情況下重命名列比CHANGE更方便。

●ALTER:僅用于更改列的默認(rèn)值。

CHANGE是對標(biāo)準(zhǔn)SQL的MySQL擴(kuò)展。MODIFY和RENAME COLUMN是用于Oracle兼容性的MySQL擴(kuò)展。

若要更改列名稱和定義,請使用CHANGE,指定新舊名稱和新定義。例如,要將一個INT NOT NULL列從a重命名為b,并更改其定義為使用BIGINT數(shù)據(jù)類型,同時保留NOT NULL屬性,請這樣做:

若要更改列定義但不更改其名稱,請使用CHANGE或MODIFY。使用CHANGE,語法需要兩個列名,因此必須兩次指定相同的名稱才能保持名稱不變。例如,要更改b列的定義,可以這樣做:

MODIFY更方便在不改變名稱的情況下改變定義,因?yàn)樗恍枰忻淮?

若要更改列名,但不更改其定義,請使用CHANGE或RENAME COLUMN。對于CHANGE,語法需要列定義,因此要保持定義不變,必須重新指定列當(dāng)前具有的定義。例如,要將一個INT NOT NULL列從b重命名為a,請這樣做:

RENAME COLUMN更方便在不改變定義的情況下更改名稱,因?yàn)樗恍枰屡f名稱:

通常,不能將列重命名為表中已經(jīng)存在的名稱。但是,有時情況并非如此,比如交換名稱或在循環(huán)中移動名稱。如果一個表有名為a、b和c的列,這些是有效的操作:

對于使用CHANGE或MODIFY進(jìn)行的列定義更改,定義必須包括數(shù)據(jù)類型和應(yīng)該應(yīng)用于新列的所有屬性,而不是索引屬性(如PRIMARY KEY 或 UNIQUE)。原始定義中出現(xiàn)但未為新定義指定的屬性將不進(jìn)行繼承。假設(shè)一個列col1被定義為INT UNSIGNED DEFAULT 1 COMMENT ‘my column‘,然后你按照如下方式修改該列,只打算將INT改為BIGINT:

該語句將數(shù)據(jù)類型從INT更改為BIGINT,但也刪除了UNSIGNED、DEFAULT和COMMENT屬性。為了保留它們,語句必須明確地包含它們:

對于使用CHANGE或MODIFY更改數(shù)據(jù)類型,MySQL嘗試將現(xiàn)有的列值盡可能轉(zhuǎn)換為新的類型。

警告

這種轉(zhuǎn)換可能會導(dǎo)致數(shù)據(jù)的更改。例如,如果縮短字符串列,值可能會被截?cái)唷H绻D(zhuǎn)換到新的數(shù)據(jù)類型會導(dǎo)致數(shù)據(jù)丟失,為了防止操作成功,請?jiān)谑褂肁LTER TABLE之前啟用嚴(yán)格SQL模式。

如果使用CHANGE或MODIFY縮短存在索引的列,而結(jié)果列長度小于索引長度,MySQL會自動縮短索引。

對于通過CHANGE或RENAME COLUMN重命名的列,MySQL自動將這些引用重命名為重命名列:

●引用舊列的索引,包括不可見的索引和禁用的MyISAM索引。

●引用舊列的外鍵。

對于通過CHANGE或RENAME COLUMN重命名的列,MySQL不會自動將這些引用重命名為重命名列:

●引用重命名列的生成列和分區(qū)表達(dá)式。必須如同ALTER TABLE語句中一樣,使用CHANGE重新定義這些表達(dá)式。

●引用重命名列的視圖和存儲程序。必須手動更改這些對象的定義以引用新的列名。

若要對表中的列重新排序,請?jiān)贑HANGE或MODIFY操作中使用FIRST和AFTER。

ALTER ... SET DEFAULT 或 ALTER ... DROP DEFAULT分別為列指定新的默認(rèn)值或刪除舊的默認(rèn)值。如果舊的默認(rèn)值被刪除,并且列可以為NULL,那么新默認(rèn)值為NULL。如果列不能為NULL, MySQL會分配一個默認(rèn)值。

主鍵和索引

DROP PRIMARY KEY刪除主鍵。如果沒有主鍵,就會發(fā)生錯誤。

如果啟用了sql_require_primary_key系統(tǒng)變量,嘗試刪除主鍵會產(chǎn)生錯誤。

如果在表中添加UNIQUE INDEX 或 PRIMARY KEY,MySQL會將其存儲在任何非唯一索引之前,以便盡早檢測重復(fù)鍵。

DROP INDEX刪除索引。這是對標(biāo)準(zhǔn)SQL的MySQL擴(kuò)展。要確定索引名稱,請使用SHOW INDEX FROM tbl_name。

有些存儲引擎允許在創(chuàng)建索引時指定索引類型。index_type說明符的語法是USING type_name。首選位置在列列表之后。在以后的MySQL版本中,將不再支持使用列列表之前的選項(xiàng)。

index_option值指定索引的其他選項(xiàng)。USING就是這樣一個選項(xiàng)。

RENAME INDEX old_index_name TO new_index_name 重命名索引。這是對標(biāo)準(zhǔn)SQL的MySQL擴(kuò)展。表的內(nèi)容保持不變。old_index_name必須是表中未被ALTER TABLE語句刪除的現(xiàn)有索引的名稱。new_index_name是新的索引名,在應(yīng)用了更改之后,它不能在結(jié)果表中索引名重復(fù)。兩個索引名都不能是PRIMARY。

如果在MyISAM表上使用ALTER TABLE,那么將在單獨(dú)的批處理中創(chuàng)建所有非惟一索引(如同REPAIR TABLE)。當(dāng)有很多索引時,這會使ALTER TABLE更快。

對于MyISAM表,可以顯式地控制鍵更新。使用ALTER TABLE ... DISABLE KEYS告訴MySQL停止更新非唯一索引。然后使用ALTER TABLE ... ENABLE KEYS 來重新創(chuàng)建丟失的索引。MyISAM使用一種特殊的算法來實(shí)現(xiàn)這一點(diǎn),這種算法比逐個插入鍵要快得多,因此在執(zhí)行批量插入操作之前禁用鍵應(yīng)該會有相當(dāng)大的速度提高。使用ALTER TABLE ... DISABLE KEYS除了前面提到的權(quán)限外,還需要INDEX權(quán)限。

雖然禁用了非惟一索引,但是對于SELECT和EXPLAIN等語句,它們會被忽略,否則它們將使用這些索引。

在使用ALTER TABLE語句之后,可能需要運(yùn)行ANALYZE TABLE來更新索引基數(shù)信息。

ALTER INDEX操作允許將索引變?yōu)榭梢娀虿豢梢姟?yōu)化器不使用不可見索引。索引可見性的修改適用于主鍵以外的索引(顯式或隱式)。該特性與存儲引擎無關(guān)(支持任何引擎)。

官方文檔地址:

https://dev.mysql.com/doc/refman/8.0/en/alter-table.html

MySQL的SQL語句 - 數(shù)據(jù)定義語句(6)- ALTER TABLE 語句 (3)

標(biāo)簽:兼容性???ble???視圖???支持???就會???屬性???命名???sql語句???mamicode

本條技術(shù)文章來源于互聯(lián)網(wǎng),如果無意侵犯您的權(quán)益請點(diǎn)擊此處反饋版權(quán)投訴

本文系統(tǒng)來源:https://blog.51cto.com/15023289/2560867

總結(jié)

以上是生活随笔為你收集整理的mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。