程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql修正表構造辦法實例詳解

mysql修正表構造辦法實例詳解

編輯:MySQL綜合教程

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數據庫法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved