1. 程式人生 > >MYSQL資料庫(九)- 修改資料表名稱、列名稱

MYSQL資料庫(九)- 修改資料表名稱、列名稱

目錄

一、修改列定義(modify col_name)

二、修改列型別(modify col_name)

三、修改列名稱(change col_name)

三、修改表名稱(rename table a to b)

用到的語句

a、修改列定義和名稱:

語法一:Alter table tbl_name modify[column] col_name [first|after col_name]

講解:更改 資料表 某某表 修改 【列】 列名稱 列定義 【位置|位置】

語法二:alter table tab_name change[column] old_name new_name [first|after col_name]

講解:更改 資料表 某某表 修改 【列】 列名稱 列定義 【位置|位置】

注意:語法二的功能要比語法一大很多,因為語法二既可以更改列定義,由可以更改列名稱

b、修改表名稱:

語法一: alter table tbl_name rename[to|as] new_tbl_name

講解:可以更改一張資料表名稱

語法二:rename table tbl_name to new_tbl_name [,tbl_name2 TO new_tbl_namew]……

講解:可以多表更改名稱

一、修改列定義(改變age列的位置,使用modify)

  • 先確定我們資料庫存在我們操作的資料表city2
mysql> show columns from city2;//查詢資料表
+----------+----------------------+------+-----+---------+-------+
| Field    | Type                 | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id       | smallint(5) unsigned | NO   |     | 0       |       |
| username | varchar(20)          | NO   |     | NULL    |       |
| pid      | smallint(5) unsigned | YES  |     | NULL    |       |
| age      | tinyint(3) unsigned  | NO   |     | NULL    |       |
+----------+----------------------+------+-----+---------+-------+
  • 案例

//具體操作語句:更改資料表city2,修改age列 位於username之後
mysql> alter table city2 modify age tinyint unsigned NOT NULL after username;
Query OK, 0 rows affected (0.21 sec)//修改成功


//修改前age列位於pid之下
mysql> show columns from city2;
+----------+----------------------+------+-----+---------+-------+
| Field    | Type                 | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id       | smallint(5) unsigned | NO   |     | 0       |       |
| username | varchar(20)          | NO   |     | NULL    |       |
| pid      | smallint(5) unsigned | YES  |     | NULL    |       |
| age      | tinyint(3) unsigned  | NO   |     | NULL    |       |
+----------+----------------------+------+-----+---------+-------+

//修改後,age位於username之下,pid之上
+----------+----------------------+------+-----+---------+-------+
| Field    | Type                 | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id       | smallint(5) unsigned | NO   |     | 0       |       |
| username | varchar(20)          | NO   |     | NULL    |       |
| age      | tinyint(3) unsigned  | NO   |     | NULL    |       |
| pid      | smallint(5) unsigned | YES  |     | NULL    |       |
+----------+----------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

二、修改列型別(修改age列的儲存型別,使用modify)

注意:由大型別改變成小型別的時候有可能造成資料的丟失

語句: alter table city2 modify age smallint unsigned NOT NULL;
解析:更改資料表city2 修改age列,型別:smallint,無符號,非空


//具體操作
mysql> alter table city2 modify age smallint unsigned NOT NULL;
Query OK, 0 rows affected (0.18 sec)//修改成功

//查詢資料表
mysql> show columns from city2;
//修改前,age的型別為tinyint
+----------+----------------------+------+-----+---------+-------+
| Field    | Type                 | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id       | smallint(5) unsigned | NO   |     | 0       |       |
| username | varchar(20)          | NO   |     | NULL    |       |
| age      | tinyint(3) unsigned  | NO   |     | NULL    |       |
| pid      | smallint(5) unsigned | YES  |     | NULL    |       |
+----------+----------------------+------+-----+---------+-------+

//修改後,age的型別改變為smallint
+----------+----------------------+------+-----+---------+-------+
| Field    | Type                 | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id       | smallint(5) unsigned | NO   |     | 0       |       |
| username | varchar(20)          | NO   |     | NULL    |       |
| age      | smallint(5) unsigned | NO   |     | NULL    |       |
| pid      | smallint(5) unsigned | YES  |     | NULL    |       |
+----------+----------------------+------+-----+---------+-------+


三、修改列名稱(使用change改變列的名稱和型別,使用change)

注意:change col_name 不僅僅可以修改列定義,還可以修改列的名稱。

語法:alter table tab_name change[column] old_name new_name [first|after col_name]

解析:更改資料表某某,改變列 老列名 新列明 列定於【位置first|某列之後】


語法:alter table city2 change pid p_id tinyint unsigned not null
解析:更改資料表city2 改變pid列 老名稱:pid,新名稱:p_id,型別:tinyint ,無符號,非空。

mysql> alter table city2 change pid p_id tinyint unsigned not null;
Query OK, 0 rows affected (0.20 sec)//修改成功過

mysql> show columns from city2;
//修改前,資料表的名稱pid 型別為smallint
+----------+----------------------+------+-----+---------+-------+
| Field    | Type                 | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id       | smallint(5) unsigned | NO   |     | 0       |       |
| username | varchar(20)          | NO   |     | NULL    |       |
| age      | smallint(5) unsigned | NO   |     | NULL    |       |
| pid      | smallint(5) unsigned | YES  |     | NULL    |       |
+----------+----------------------+------+-----+---------+-------+

//修改後,pid列名稱改變為p_id,型別由smallint改變為tinyint
+----------+----------------------+------+-----+---------+-------+
| Field    | Type                 | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id       | smallint(5) unsigned | NO   |     | 0       |       |
| username | varchar(20)          | NO   |     | NULL    |       |
| age      | smallint(5) unsigned | NO   |     | NULL    |       |
| p_id     | tinyint(3) unsigned  | NO   |     | NULL    |       |
+----------+----------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

三、修改表名稱

  • 注意:修改資料表的名稱有兩種方式。

//可以更改一張資料表
1、alter table tbl_name rename[to|as] new_tbl_name

//可以為多張資料表修改名稱
2、rename table tbl_name to new_tbl_name [,tbl_name2 TO new_tbl_namew]……

  • 一、方法一 單列改名
語句:show tables;
解析:檢視資料庫裡有那些資料表

語句:alter table city2 rename city222;
解析:更改資料表名稱tity2 更改為名稱city222

mysql> show tables;
+--------------+
| Tables_in_t1 |
+--------------+
| city         |
| city1        |
| city2        |
| mm1          |
| mm2          |
| mm3          |
| sheng        |
+--------------+

//我們修改city2的表名稱為city222
mysql> alter table city2 rename city222;
Query OK, 0 rows affected (0.07 sec)//修改成功

mysql> show tables;

//修改前,資料表city2存在
+--------------+
| Tables_in_t1 |
+--------------+
| city         |
| city1        |
| city2        |
| mm1          |
| mm2          |
| mm3          |
| sheng        |
+--------------+
//修改後,city2資料表變成了city222
+--------------+
| Tables_in_t1 |
+--------------+
| city         |
| city1        |
| city222      |
| mm1          |
| mm2          |
| mm3          |
| sheng        |
+--------------+

方法二,多列改名

mysql> rename table city to city_1,city222 to city2;
Query OK, 0 rows affected (0.17 sec)//修改成功

mysql> show tables;
//修改前,city和city111資料表存在
+--------------+
| Tables_in_t1 |
+--------------+
| city         |
| city1        |
| city222      |
| mm1          |
| mm2          |
| mm3          |
| sheng        |
+--------------+

//city和city111資料表的名稱 改變為了 city_1 和city2。
+--------------+
| Tables_in_t1 |
+--------------+
| city1        |
| city2        |
| city_1       |
| mm1          |
| mm2          |
| mm3          |
| sheng        |
+--------------+



注意:我們儘量不要去修改表的名稱和列的名稱。因為我們在程式碼中或者某項操作中引用了此資料表或者表的列,我們更改後可能會導致某些試圖和儲存過程無法正常工作。所以儘量不要去修改資料表名和列名