复制表
基于現有的表創建新表是一項很容易的任務。以下代碼將得到tb_test表的一個副本,名為tb_test2:
?mysql>?create?table?tb_test2?select?*?from?db_test.tb_test; ????Query?OK,?0?rows?affected?(0.03?sec)??????????????????????? ????Records:?0??Duplicates:?0??Warnings:?0?
將向數據庫增加一個相同的表tb_test2。而有的時候,可能希望只基于現有表的幾個列創建一個表。通過create?select語句中指定列就可以實現:
mysql>?describe?tb_test;???????????????????????????????????????????????????????? +-----------+------------------+------+-----+---------+----------------+???????? |?Field?????|?Type?????????????|?Null?|?Key?|?Default?|?Extra??????????????????? +-----------+------------------+------+-----+---------+----------------+???????? |?id????????|?int(10)?unsigned?|?NO???|?PRI?|?NULL????|?auto_increment?|???????? |?firstname?|?varchar(25)??????|?NO???|?????|?NULL????|????????????????|???????? |?lastname??|?varchar(25)??????|?NO???|?????|?NULL????|????????????????|???????? |?email?????|?varchar(45)??????|?NO???|?????|?NULL????|????????????????|???????? |?phone?????|?varchar(10)??????|?NO???|?????|?NULL????|????????????????|???????? +-----------+------------------+------+-----+---------+----------------+???????? 5?rows?in?set?(0.01?sec)???????????????????????????????????????????????????????? mysql>?create?table?tb_test2?select?id,?firstname,?lastname,?email?from?tb_test; Query?OK,?0?rows?affected?(0.03?sec)???????????????????????????????????????????? Records:?0??Duplicates:?0??Warnings:?0?????????????????????????????????????????? mysql>?describe?tb_test2;??????????????????????????????????????????????????????? +-----------+------------------+------+-----+---------+-------+????????????????? |?Field?????|?Type?????????????|?Null?|?Key?|?Default?|?Extra?|????????????????? +-----------+------------------+------+-----+---------+-------+????????????????? |?id????????|?int(10)?unsigned?|?NO???|?????|?0???????|???????|????????????????? |?firstname?|?varchar(25)??????|?NO???|?????|?NULL????|???????|????????????????? |?lastname??|?varchar(25)??????|?NO???|?????|?NULL????|???????|????????????????? |?email?????|?varchar(45)??????|?NO???|?????|?NULL????|???????|????????????????? +-----------+------------------+------+-----+---------+-------+????????????????? 4?rows?in?set?(0.01?sec)? 創建臨時表有的時候,當工作在非常大的表上 時,可能偶爾需要運行很多查詢獲得一個大量數據的小的子集,不是對整個表運行這些查詢,而是讓MySQL每次找出所需的少數記錄,將記錄保存到一個臨時表 可能更快一些,然后對這些臨時表進行查詢操作。可以通過使用temporary關鍵字和create?table語句來實現。 ?mysql>?create?temporary?table?emp_temp?select?firstname,?lastname?from?tb_test; ????Query?OK,?0?rows?affected?(0.02?sec)??????????????????????????????????????????? ????Records:?0??Duplicates:?0??Warnings:?0?臨時表的創建與其它表一樣,只是它們存儲在操作系統指定的臨時目錄中。臨時表將在你連接MySQL期間存在,當你斷開時,MySQL將自動刪除表并釋放所有的內存空間;當然了,你也可以手動的使用drop?table命令刪除臨時表。
查看數據庫中可用的表
可以使用show?tables命令完成。例如:
查看表結構
可以使用describe語句查看表結構,例如:
另外,使用show命令也能得到相同的結果,例如:
mysql>?show?columns?in?tb_test;????????????????????????????????????????? +-----------+------------------+------+-----+---------+----------------+ |?Field?????|?Type?????????????|?Null?|?Key?|?Default?|?Extra??????????| +-----------+------------------+------+-----+---------+----------------+ |?id????????|?int(10)?unsigned?|?NO???|?PRI?|?NULL????|?auto_increment?| |?firstname?|?varchar(25)??????|?NO???|?????|?NULL????|????????????????| |?lastname??|?varchar(25)??????|?NO???|?????|?NULL????|????????????????| |?email?????|?varchar(45)??????|?NO???|?????|?NULL????|????????????????| |?phone?????|?varchar(10)??????|?NO???|?????|?NULL????|????????????????| +-----------+------------------+------+-----+---------+----------------+ 5?rows?in?set?(0.00?sec)?刪除表
刪除表是使用drop?table語句實現的,其語法如下:
更改表結構
我 們會發現,我們會經常修改和改進表結構,特別是在開發初期;但是,每次進行修改時不必都先刪除再重新創建表。相反,可以使用alter語句修改表的結構。 利用這個語句,可以再必要時刪除、修改和增加列。和create?table一樣,alter?table提供了很多子句、關鍵字和選項。這里只是會說一 些簡單的使用,比如在表tb_demo表中插入一列,表示email,代碼如下:
新的列放在表的最后位置。不過,還可以使用適當的關鍵字(包括first、after和last)來控制新列的位置。如果想修改表,比如,剛剛加的email,我想加入一個not?null控制,代碼可以是這樣的:
?mysql>?alter?table?tb_demo?change?email?email?varchar(45)?not?null;Query?OK,?0?rows?affected?(0.11?sec)???????????????????????????????Records:?0??Duplicates:?0??Warnings:?0?如果覺的這個email這列沒有存在的必要了,可以使用下面的代碼刪除它,例如:
?mysql>?alter?table?tb_demo?drop?email;??Query?OK,?0?rows?affected?(0.09?sec)????Records:?0??Duplicates:?0??Warnings:?0??
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: 领航员和凯雷德哪个好 比较两款导航仪的性
- 下一篇: 汽车油箱盖用嘴能吸动而吹不动是不是正常的