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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章