mysql修正表構造辦法實例詳解。本站提示廣大學習愛好者:(mysql修正表構造辦法實例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql修正表構造辦法實例詳解正文
本文實例講述了mysql修正表構造辦法。分享給年夜家供年夜家參考。詳細以下:
mysql修正表構造應用ALTER TABLE語句,上面就為您具體引見mysql修正表構造的語句寫法,願望對您進修mysql修正表構造方面能有所贊助。
ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...] alter_specification: ADD [COLUMN] create_definition [FIRST | AFTER column_name ] or ADD INDEX [index_name] (index_col_name,...) or ADD PRIMARY KEY (index_col_name,...) or ADD UNIQUE [index_name] (index_col_name,...) or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} or CHANGE [COLUMN] old_col_name create_definition or MODIFY [COLUMN] create_definition or DROP [COLUMN] col_name or DROP PRIMARY KEY or DROP INDEX index_name or RENAME [AS] new_tbl_name or table_options
ALTER TABLE許可你修正一個現有表的構造。例如,你可以增長或刪除列、發明或消去索引、轉變現有列的類型、或從新定名列或表自己。你也能轉變表的正文和表的類型。
假如你應用ALTER TABLE修正一個列解釋然則DESCRIBE tbl_name顯示你的列並沒有被修正,這能夠是MySQL由於在7.7.1 隱含的列解釋轉變中描寫的緣由之一而疏忽了你的修正。例如,假如你試圖將一個VARCHAR改成CHAR,MySQL將依然應用VARCHAR,假如表包 含其他變長的列。
ALTER TABLE經由過程制造本來表的一個暫時正本來任務。修正在正本上實施,然後本來的表被刪除而且從新定名一個新的。如許做使得一切的修正主動地轉向到新表,沒 有任何掉敗的修正。當ALTER TABLE正在履行時,本來的桌可被其他客戶讀取。更新和寫入表被延遲到新表預備好了為止。
為了應用ALTER TABLE,你須要在表上的select、insert、delete、update、create和drop的權限。
IGNORE是MySQL對ANSI SQL92 的一個擴大,假如在新表中的獨一鍵上有反復,它掌握ALTER TABLE若何任務。假如IGNORE沒被指定,正本被廢棄而且恢回復復興狀。假如IGNORE被指定,那末對獨一鍵有反復的行,只要應用第一行;其他被刪除。
你可以在單個ALTER TABLE語句中收回多個ADD、ALTER、DROP和CHANGE子句。這是MySQL對ANSI SQL92的一個擴大,SQL92在每一個ALTER TABLE語句中只許可一個子句。
CHANGE col_name、DROP col_name和DROP INDEX是MySQL對 ANSI SQL92 的擴大。
MODIFY是 Oracle 對ALTER TABLE的擴大。
可選的詞COLUMN是一個純潔的樂音且可以省略。
假如你應用ALTER TABLE tbl_name RENAME AS new_name而沒有任何其他選項,MySQL簡略地重定名對應於表tbl_name的文件。沒有需要創立暫時表。
create_definition子句應用CREATE TABLE雷同的ADD和CHANGE語法。留意語法包含列名字,不只列類型。
你可使用CHANGE old_col_name create_definition子句重定名一個列。為了如許做,指定舊的和新的列名字和列以後有的類型。例如,重定名一個INTEGER列,從a到b,你可以如許做:
mysql> ALTER TABLE t1 CHANGE a b INTEGER;
假如你想要轉變列的類型而非名字,就算他們是一樣的,CHANGE語法依然須要2個列名。例如:
mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;
但是,在MySQL3.22.16a,你也能夠應用MODIFY來轉變列的類型而不是重定名它:
mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;
假如你應用CHANGE或MODIFY延長一個列,一個索引存在於該列的部門(例如,假如你有一個VARCHAR列的頭10個字符的索引),你不克不及使列短於被索引的字符數量。
當你應用CHANGE或MODIFY轉變一個列類型時,MySQL盡量試圖很好地變換數據到新類型。
在MySQL3.22或今後,你能應用FIRST或ADD ... AFTER col_name在一個表的行內涵一個特定的地位增長列。缺省是增長到最初一列。
ALTER COLUMN為列指定新的缺省值或刪除老的缺省值。假如老的缺省值被刪除且列可所以NULL,新缺省值是NULL。假如列不克不及是NULL,MySQL付與一個缺省值。缺省值賦值在7.7 CREATE TABLE句法中描寫。
DROP INDEX刪除一個索引。這是MySQL對 ANSI SQL92 的一個擴大。
假如列從一張表中被拋棄,列也從他們是構成部門的任何索引中被刪除。假如構成一個索引的一切列被拋棄,該索引也被拋棄。
DROP PRIMARY KEY拋棄主索引。假如如許的索引不存在,它拋棄表中第一個UNIQUE索引。(假如沒有明白地指定PRIMARY KEY,MySQL標志第一個UNIQUE鍵為PRIMARY KEY。)
用 C API 函數mysql_info(),你能找出若干記載被拷貝, 和(當應用IGNORE時)因為獨一鍵值的反復若干記載被刪除。
FOREIGN KEY、CHECK和REFERENCES子句現實上不做任何工作,他們的句法僅僅供給兼容性,使得更輕易地從其他SQL辦事器移植代碼而且運轉借助援用來創立表的運用法式。見5.4 MySQL缺乏的功效。
這裡是一個例子,顯示了一些ALTER TABLE用法。我們以一個以下創立的表t1開端:
mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));
重定名表,從t1到t2:
mysql> ALTER TABLE t1 RENAME t2;
為了轉變列a,從INTEGER改成TINYINT NOT NULL(名字一樣),而且轉變列b,從CHAR(10)改成CHAR(20),同時重定名它,從b改成c:
mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
增長一個新TIMESTAMP列,名為d:
mysql> ALTER TABLE t2 ADD d TIMESTAMP;
在列d上增長一個索引,而且使列a為主鍵:
mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
刪出列c:
mysql> ALTER TABLE t2 DROP COLUMN c;
增長一個新的AUTO_INCREMENT整數列,定名為c:
mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (c);
留意,我們索引了c,由於AUTO_INCREMENT柱必需被索引,而且別的我們聲明c為NOT NULL,由於索引了的列不克不及是NULL。
當你增長一個AUTO_INCREMENT列時,主動地用次序數字填出列值。
願望本文所述對年夜家的MySQL數據庫法式設計有所贊助。