ALTER TABLE允許你修改一個(gè)現(xiàn)有表的結(jié)構(gòu)。例如,你可以增加或刪除列、創(chuàng)造或消去索引、改變現(xiàn)有列的類型、或重新命名列或表本身。你也能改變表的注釋和表的類型。
你可以使用CHANGE old_col_name create_definition子句重命名一個(gè)列。為了這樣做,指定舊的和新的列名字和列當(dāng)前有的類型。例如,重命名一個(gè)INTEGER列,從a到b,你可以這樣做:
mysql> ALTER TABLE t1 CHANGE a b INTEGER;
如果你想要改變列的類型而非名字,就算他們是一樣的,CHANGE語(yǔ)法仍然需要2個(gè)列名。例如:
mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;
然而,在MySQL3.22.16a,你也可以使用MODIFY來(lái)改變列的類型而不是重命名它:
mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;
如果你使用CHANGE或MODIFY縮短一個(gè)列,一個(gè)索引存在于該列的部分(例如,如果你有一個(gè)VARCHAR列的頭10個(gè)字符的索引),你不能使列短于被索引的字符數(shù)目。
ALTER COLUMN為列指定新的缺省值或刪除老的缺省值。如果老的缺省值被刪除且列可以是NULL,新缺省值是NULL。如果列不能是NULL,MySQL賦予一個(gè)缺省值。缺省值賦值在7.7 CREATE TABLE句法中描述。
DROP INDEX刪除一個(gè)索引。這是MySQL對(duì) ANSI SQL92 的一個(gè)擴(kuò)充。
如果列從一張表中被丟棄,列也從他們是組成部分的任何索引中被刪除。如果組成一個(gè)索引的所有列被丟棄,該索引也被丟棄。
DROP PRIMARY KEY丟棄主索引。如果這樣的索引不存在,它丟棄表中第一個(gè)UNIQUE索引。(如果沒(méi)有明確地指定PRIMARY KEY,MySQL標(biāo)記第一個(gè)UNIQUE鍵為PRIMARY KEY。)
用 C API 函數(shù)mysql_info(),你能找出多少記錄被拷貝, 和(當(dāng)使用IGNORE時(shí))由于唯一鍵值的重復(fù)多少記錄被刪除。
這里是一個(gè)例子,顯示了一些ALTER TABLE用法。我們以一個(gè)如下
| /*創(chuàng)建的表t1開(kāi)始:mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));重命名表,從t1到t2:mysql> ALTER TABLE t1 RENAME t2;為了改變列a,從INTEGER改為T(mén)INYINT NOT NULL(名字一樣),并且改變列b,從CHAR(10)改為CHAR(20),同時(shí)重命名它,從b改為c:mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);增加一個(gè)新TIMESTAMP列,名為d:mysql> ALTER TABLE t2 ADD d TIMESTAMP;在列d上增加一個(gè)索引,并且使列a為主鍵:mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);刪除列c:mysql> ALTER TABLE t2 DROP COLUMN c;增加一個(gè)新的AUTO_INCREMENT整數(shù)列,命名為c:mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (c);*/ |
注意,這里索引了c,因?yàn)锳UTO_INCREMENT柱必須被索引,并且另外我們聲明c為NOT NULL,因?yàn)樗饕说牧胁荒苁荖ULL。 當(dāng)你增加一個(gè)AUTO_INCREMENT列時(shí),自動(dòng)地用順序數(shù)字填入列值。
具體實(shí)例分析:
新聞熱點(diǎn)
疑難解答
圖片精選