mysql修改表結構alter

2021-05-09 01:21:33 字數 2849 閱讀 8798

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

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允許你修改乙個現有表的結構。例如,你可以增加或刪除列、創造或消去索引、改變現有列的型別、或重新命名列或表本身。你也能改變表的注釋和表的型別。見7.7 create 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語法。注意語法包括列名字,不只列型別。見7.7 create table句法。 

你可以使用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;

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修改表結構語句 alter

mysql修改表結構語句 alter create table user id int primary key auto increment,username varchar 20 unique,password varchar 20 not null,age int,birthday date 修...

Mysql資料庫alter修改表

如果你想要修改表的資訊,你會發現alter很強大。我們可以看到這樣一張表。create table score student id int 10 unsigned notnull event id int 10 unsigned notnull score int 11 default null ...

mysql修改資料表 alter表操作

格式 alter tabel 表名 修改內容 常用八種操作如下 修改表名 alter table 舊表名 rename 新錶名 修改欄位名 alter table 表名 change 舊欄位名 新欄位名 新資料型別 注意 新資料型別不能為空修改欄位的資料型別 alter table 表名 modif...