rename table語法
rename table tbl_name to new_tbl_name [, tbl_name2 to new_tbl_name2] ...本語句用於對一個或多個表進行重命名。
重命名操作自動進行,這意味著當重命名正在運行時,其它線程不能讀取任何表。例如,如果您有一個原有的表old_table,您可以創建另一個具有相同結構的空表new_table,然後用此空表替換原有的表:
create table new_table (...);rename table old_table to backup_table, new_table to old_table;如果此語句用於對多個表進行重命名,則重命名操作從左至右進行。如果您想要交換兩個表的名稱,您可以這樣做(假設不存在名稱為tmp_table的表):
rename table old_table to tmp_table, new_table to old_table, tmp_table to new_table;只要兩個數據庫教程位於同一文件系統中,您還可以對表進行重命名,把表從一個數據庫中移動到另一個數據庫中:
rename table current_db.tbl_name to other_db.tbl_name;當您執行rename時,您不能有被鎖定的表,也不能有處於活性狀態的事務。您還必須擁有原表的alter和drop權限,以及新表的create和insert權限。
如果mysql教程對多個表進行重命名時遇到了錯誤,mysql會對所有已被重命名的表進行反向重命名,返回到原來的狀態。
只要您不嘗試通過重命名把視圖加入另一個數據庫中,則rename table也可以用於視圖
陸上到mysql後,use test改變當前數據庫,具體步驟如下所示:
mysql> use test
reading table information for completion of table and column names
you can turn off this feature to get a quicker startup with -a
database changed
mysql> show tables; //查看表,有關show命令的用法本人博客有,請另外參考
+----------------+
| tables_in_test |
+----------------+
| articles |
| me |
| mytime |
+----------------+
3 rows in set (0.01 sec)
mysql> desc mytime;
+-------+-----------+------+-----+-------------------+-------+
| field | type | null | key | default | extra |
+-------+-----------+------+-----+-------------------+-------+
| f1 | datetime | yes | | null | |
| f2 | timestamp | no | | current_timestamp | |
+-------+-----------+------+-----+-------------------+-------+
2 rows in set (0.02 sec)
mysql> select * from mytime;
+---------------------+---------------------+
| f1 | f2 |
+---------------------+---------------------+
| 2008-12-18 17:32:48 | 2008-12-18 17:32:48 |
| 1234-12-12 11:23:45 | 0000-00-00 00:00:00 |
| 2034-12-12 11:23:45 | 2008-12-18 17:39:37 |
+---------------------+---------------------+
3 rows in set (0.03 sec)
mysql> create table my select * from mytime;
query ok, 3 rows affected (0.01 sec)
records: 3 duplicates: 0 warnings: 0
此操作相當於復制表,但也可以說重命名。我們得到了和原來一樣的表。如下:
mysql> select * from my;
+---------------------+---------------------+
| f1 | f2 |
+---------------------+---------------------+
| 2008-12-18 17:32:48 | 2008-12-18 17:32:48 |
| 1234-12-12 11:23:45 | 0000-00-00 00:00:00 |
| 2034-12-12 11:23:45 | 2008-12-18 17:39:37 |
+---------------------+---------------------+
3 rows in set (0.00 sec)
此時我們可以刪除原來的mytime表
mysql> drop table mytime;
query ok, 0 rows affected (0.00 sec)
我們也可以用專門的sql語句實現。那就是rename命令,如下:
mysql> rename table mytime to my;
query ok, 0 rows affected (0.00 sec)
mysql> select * from mytime ;
error 1146 (42s02): table 'test.mytime' doesn't exist
mysql> select * from my ;
+---------------------+---------------------+
| f1 | f2 |
+---------------------+---------------------+
| 2008-12-18 17:32:48 | 2008-12-18 17:32:48 |
| 1234-12-12 11:23:45 | 0000-00-00 00:00:00 |
| 2034-12-12 11:23:45 | 2008-12-18 17:39:37 |
+---------------------+---------------------+
3 rows in set (0.00 sec)
還有就是alter table 表名1 rename to 表名2 ,如下所示:
mysql> alter table my rename to mytime;
query ok, 0 rows affected (0.01 sec)
一些其實實例語名
##mysql重命名表,建立外鍵,增、刪、改列名實例
##增加到某個字段之後
alter table tb_nippon_mms_info add province varchar(50) default null after retcode;
alter table tb_nippon_mms_info add city varchar(50) default null after province;
##增加到某個字段之前
alter table tb_nippon_mms_info add province varchar(50) default null before retcode;
alter table tb_nippon_mms_info add city varchar(50) default null before province;
##刪除名字為states的列
alter table tb_nine_integral_mo_info drop column states ;
##改變手機號碼字段為約束鍵
alter table business.tb_nine_ticket_popedom change phone phone varchar(50) not null unique;
##改變列名flag為states
alter table tb_nine_integral_mo_info change flag states tinyint(1);
–重命名表
rename table t_softwareport to software_port;
–建立外鍵
alter table software_port add constraint fk_software_port_softwareprocessid foreign key (softwareprocessid)
references software_process (id) on delete restrict on update restrict;