程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL學習筆記之五有關數據表操作

MySQL學習筆記之五有關數據表操作

編輯:MySQL綜合教程

MySQL在創建表的時候,創建一個.frm文件保存表和列定義。索引存儲在一個有.MYI(MYindex)擴展名的文件並且數據存儲在有.MYD(MYData)擴展名的文件中。

一、用SHOW/ DESCRIBE語句顯示數據表的信息

語法:
SHOW TABLES [FROM db_name] [LIKE wild]

or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild]

or SHOW INDEX FROM tbl_name [FROM db_name]

or SHOW TABLE STATUS [FROM db_name] [LIKE wild]

{DESCRIBE | DESC} tbl_name {col_name | wild}

SHOW TABLES列出在一個給定的數據庫中的表。你也可以用mysqlshow db_name命令得到這張表。當然使用mysqlshow時,需要接參數-u 用戶名 -p xx;

SHOW COLUMNS列出在一個給定表中的列。如果列類型不同於你期望的是基於CREATE TABLE語句的那樣,注意,MySQL有時改變列類型。

 DESCRIBE語句提供了類似SHOW COLUMNS的信息。DESCRIBE提供關於一張表的列的信息。col_name可以是一個列名字或包含SQL的“%”和“_”通配符的一個字符串。這個語句為了與Oracle 兼容而提供的。

 SHOW TABLE STATUS(在版本3.23引入)運行類似SHOW STATUS,但是提供每個表的更多信息。你也可以使用mysqlshow --status db_name命令得到這張表。

 SHOW FIELDS是SHOW COLUMNS一個同義詞,SHOW KEYS是SHOW INDEX一個同義詞。

 你也可以用mysqlshow db_name tbl_name或mysqlshow -k db_name tbl_name 列出一張表的列或索引。

 SHOW INDEX以非常相似於ODBC的SQLStatistics調用的格式返回索引信息。

二、使用mysqlshow 工具得到信息

下面簡單介紹一下mysqlshow實用程序的用法,在得到數據庫和表的信息上,使用起來非常方便。當然使用mysqlshow時,需要接參數-u 用戶名 -p xx;

得到已有數據庫的列表:

shell> mysqlshow

列出某數據庫db_name中已有的表:

shell> mysqlshow db_name

列出某數據庫表db_name.tbl_name的結構信息:

shell>mysqlshow db_name tbl_name

列出一張表的索引:

shell> mysqlshow –k db_name tbl_name

三、用CREATE TABLE 語句創建數據表

1、CREATE TABLE 語句的基本語法

CREATE TABLE tbl_name(create_definition,...) [TYPE =table_type]

create_definition: col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT][PRIMARY KEY]

在MySQL3.22或以後版本中,表名可以被指定為db_name.tbl_name,不管有沒有當前的數據庫都可以。

例如,創建一個訪問者留言表:

shell> mysql –u root –p

mysql> create database mytest;

mysql> CREATE TABLE guestbook
-> (
-> visitor VARCHAR(40),
-> comments TEXT,
-> entrydate DATETIME
->);

如果一切正常,祝賀你,你已經建立了你的第一個表!

你所創建的表名為guestbook,你可以使用這個表來存儲來字你站點訪問者的信息。你是用REEATE TABLE語句創建的這個表,這個語句有兩部分:第一部份指定表的名子;

第二部份是括在括號中的各字段的名稱和屬性,相互之間用逗號隔開。

表guestbook有三個字段:visitor,comments 和entrydate。visitor字段存儲訪問者的名字,comments字段存儲訪問者對你站點的意見,entrydate字段存儲訪問者訪問你

站點的日期和時間。

注意每個字段名後面都跟有一個專門的表達式。例如,字段名comments後面跟有表達式TEXT。這個表達式指定了字段的數據類型。數據類型決定了一個字段可以存儲什麼樣

的數據。因為字段comments包含文本信息,其數據類型定義為文本型。

2、如何指定表的類型

你也可以在創建表時指定表的類型,如果不指定表的類型,在3.22及以前版本中缺省為ISAM表,在3.23版本中缺省為MyISAM表。你應該盡量使用MyISAM表。指定表的類型經

常用於創建一個HEAP表:

mysql> CREATE TABLE fast(id int,articles TEXT) TYPE=HEAP;

3、隱含的列說明的改變

在某些情況下,MySQL隱含地改變在一個CREATE TABLE語句給出的一個列說明。(這也可能在ALTER TABLE)

 長度小於4的VARCHAR被改變為CHAR。

 如果在一個表中的任何列有可變長度,結果是整個行是變長的。因此, 如果一張表包含任何變長的列(VARCHAR、TEXT或BLOB),所有大於3個字符的CHAR列被改變為VARCHAR

列。這在任何方面都不影響你如何使用列;在MySQL中,VARCHAR只是存儲字符的一個不同方法。MySQL實施這種改變,是因為它節省空間並且使表操作更快捷。

 TIMESTAMP的顯示尺寸必須是偶數且在2 ~ 14的范圍內。如果你指定0顯示尺寸或比14大,尺寸被強制為14。從1~13范圍內的奇數值尺寸被強制為下一個更大的偶數。

 你不能在一個TIMESTAMP列裡面存儲一個文字NULL;將它設為NULL將設置為當前的日期和時間。因為TIMESTAMP列表現就是這樣,NULL和NOT NULL屬性不以一般的方式運用並

且如果你指定他們,將被忽略。DESCRIBE tbl_name總是報告該TIMESTAMP列可能賦予了NULL值。

如果你想要知道MySQL是否使用了除你指定的以外的一種列類型,在創建或改變你的表之後,發出一個DESCRIBE tbl_name語句即可。

4、利用SELECT 的結果創建表

關系數據庫的一個重要概念是,任何數據都表示為行和列組成的表,而每條SELECT 語句的結果也都是一個行和列組成的表。在許多情況下,來自SELECT 的“表”僅是一個

隨著您的工作在顯示屏上滾動的行和列的圖像。在MySQL 3.23 以前,如果想將SELECT 的結果保存在一個表中以便以後的查詢使用,必須進行特殊的安排:

1) 運行DESCRIBE 或SHOW COLUMNS 查詢以確定想從中獲取信息的表中的列類型。

2) 創建一個表,明確地指定剛才查看到的列的名稱和類型。

3) 在創建了該表後,發布一條INSERT ... SELECT 查詢,檢索出結果並將它們插入所創建的表中。

在 MySQL 3.23 中,全都作了改動。CREATE TABLE ... SELECT 語句消除了這些浪費時間的東西,使得能利用SELECT 查詢的結果直接得出一個新表。只需一步就可以完成

任務,不必知道或指定所檢索的列的數據類型。這使得很容易創建一個完全用所喜歡的數據填充的表,並且為進一步查詢作了准備。

 如果你在CREATE語句後指定一個SELECT,MySQL將為在SELECT中所有的單元創鍵新字段。例如:

mysql> CREATE TABLE test

-> (a int not null auto_increment,primary key (a), key(b))

-> SELECT b,c from test2;

這將創建一個有3個列(a,b,c)的表,其中b,c列的數據來自表test2。注意如果在拷貝數據進表時發生任何錯誤,表將自動被刪除

 可以通過選擇一個表的全部內容(無WHERE 子句)來拷貝一個表,或利用一個總是失敗的WHERE 子句來創建一個空表,如:

mysql> CREATE TABLE test SELECT * from test2;

mysql> CREATE TABLE test SELECT * from test2 where 0;

如果希望利用LOAD DATA 將一個數據文件裝入原來的文件中,而不敢肯定是否具有指定的正確數據格式時,創建空拷貝很有用。您並不希望在第一次未得到正確的選項時以

原來表中畸形的記錄而告終。利用原表的空拷貝允許對特定的列和行分隔符用LOAD DATA 的選項進行試驗,直到對輸入數據的解釋滿意時為止。在滿意之後,就可以將數據裝入

原表了。

可結合使用 CREATE TEMPORARY TABLE 與SELECT 來創建一個臨時表作為它自身的拷貝,如:

這允許修改my_tbl 的內容而不影響原來的內容。在希望試驗對某些修改表內容的查詢,而又不想更改原表內容時,這樣做很有用。為了使用利用原表名的預先編寫的腳本,不

需要為引用不同的表而編輯這些腳本;只需在腳本的起始處增加CREATE TEMPORARY TABLE 語句即可。相應的腳本將創建一個臨時拷貝,並對此拷貝進行操作,當腳本結束時服

務器會自動刪除這個拷貝。

要創建一個作為自身的空拷貝的表,可以與CREATE TEMPORARY ... SELECT 一起使用WHERE 0 子句,例如:

但創建空表時有幾點要注意。在創建一個通過選擇數據填充的表時,其列名來自所選擇的列名。如果某個列作為表達式的結果計算,則該列的“名稱”為表達式的文本。表達式

不是合法的列名,可在mysql 中運行下列查詢了解這一點:

為了正常工作,可為該列提供一個合法的別稱:

如果選擇了來自不同表的具有相同名稱的列,將會出現一定的困難。假定表t1 和t2 兩者都具有列c,而您希望創建一個來自兩個表中行的所有組合的表。那麼可以提供別

名指 定新表中惟一性的列名,如:

通過選擇數據進行填充來創建一個表並會自動拷貝原表的索引。

五、用ALTER TABLE語句修改表的結構

有時你可能需要改變一下現有表的結構,那麼Alter Table語句將是你的合適選擇。

 增加列

alter table tbl_name add col_name type

例如,給表增加一列weight

mysql>alter table pet add weight int;

 刪除列

alter table tbl_name drop col_name

例如,刪除列weight:

mysql>alter table pet drop weight;

 改變列

alter table tbl_name modify col_name type

例如,改變weight的類型:

mysql> alter table pet modify weight samllint;

另一種方法是:

alter table tbl_name change old_col_name col_name type

例如:

mysql> alter table pet change weight weight samllint;

 給列更名

mysql>alter table pet change weight wei;

 給表更名

mysql>alter table tbl_name rename new_tbl

例如,把pet表更名為animal

mysql>alter table pet rename animal;

六、用DROP TABLE 語句刪除數據表

DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...]

DROP TABLE刪除一個或多個數據庫表。所有表中的數據和表定義均被刪除,故小心使用這個命令!

在MySQL 3.22或以後版本,你可以使用關鍵詞IF EXISTS類避免不存在表的一個錯誤發生。

例如:

mysql>USE mytest;

mysql>DROP TABLE guestbook;

或者,也可以同時指定數據庫和表:

mysql>DROP TABLE mytest.guestbook;

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