您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關MySQL中怎么操作數(shù)據表,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
使用MySQL,目前你可以在三種基本數(shù)據庫表格式間選擇。當你創(chuàng)建一張表時,你可以告訴MySQL它應該對于表使用哪個表類型。MySQL將總是創(chuàng)建一個.frm文件保存表和列定義。視表類型而定,索引和數(shù)據將在其他文件中存儲。
你能用ALTER TABLE語句在不同類型的表之間變換。
MyISAM
在MySQL 3.23中,MyISAM是缺省表格類型,它是基于ISAM代碼并且有很多有用的擴展。索引存儲在一個有.MYI(MYindex)擴展名的文件并且數(shù)據存儲在有.MYD(MYData)擴展名的文件中。你能用myisamchk實用程序檢查/修復MyISAM表。
ISAM
你也可以使用放棄的ISAM。這將在不久消失,因為MyISAM是同一個東西的更好實現(xiàn)。ISAM使用一個B-tree索引,這個索引存儲在一個有.ISM擴展名的文件中并且數(shù)據存儲在有.ISD擴展名的文件中,你可用isamchk實用程序檢查/修復ISAM表。ISAM表不是跨OS/平臺二進制可移植的。
HEAP
HEAP表格使用一個雜湊(hashed)索引并且存儲在內存中。這使他們更快,但是如果MySQL崩潰,你將失去所有存儲的數(shù)據。HEAP作為臨時表很可用!
用SHOW/ DESCRIBE語句顯示數(shù)據表的信息
句法:
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}
你能使用db_name.tbl_name作為tbl_name FROM db_name句法的另一種選擇。
SHOW TABLES列出在一個給定的數(shù)據庫中的表。你也可以用mysqlshow db_name命令得到這張表。
注意:如果一個用戶沒有一個表的任何權限,表將不在SHOW TABLES或mysqlshow db_name中的輸出中顯示。
SHOW COLUMNS列出在一個給定表中的列。如果列類型不同于你期望的是基于CREATE TABLE語句的那樣,注意,MySQL有時改變列類型。
DESCRIBE語句提供了類似SHOW COLUMNS的信息。DESCRIBE提供關于一張表的列的信息。col_name可以是一個列名字或包含SQL的“%”和“_”通配符的一個字符串。這個語句為了與 兼容而提供的。
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實用程序的用法,在得到數(shù)據庫和表的信息上,使用起來非常方便。
得到已有數(shù)據庫的列表:
shell> mysqlshow
列出某數(shù)據庫db_name中已有的表:
shell> mysqlshow db_name
列出某數(shù)據庫表db_name.tbl_name的結構信息:
shell>mysqlshow db_name tbl_name
列出一張表的索引:
shell> mysqlshow –k db_name tbl_name
用CREATE TABLE 語句創(chuàng)建數(shù)據表
用 CREATE TABLE 語句創(chuàng)建表。此語句的完整語法是相當復雜的,因為存在那么多的可選子句,但在實際中此語句的應用相當簡單。如我們在第 1 章中使用的所有 CREATE TABLE 語句都不那么復雜。
有意思的是,大多數(shù)復雜東西都是一些子句,這些子句MySQL在分析后扔掉。參閱附錄 1 可以看到這些復雜的東西。
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,不管有沒有當前的數(shù)據庫都可以。
例如,創(chuàng)建一個訪問者留言表:
shell> mysql –u root –p
mysql> create database mytest;
mysql> CREATE TABLE guestbook
-> (
-> visitor VARCHAR(40),
-> comments TEXT,
-> entrydate DATETIME
->);
如果一切正常,祝賀你,你已經建立了你的第一個表!
你所創(chuàng)建的表名為guestbook,你可以使用這個表來存儲來字你站點訪問者的信息。你是用REEATE TABLE語句創(chuàng)建的這個表,這個語句有兩部分:第一部份指定表的名子;第二部份是括在括號中的各字段的名稱和屬性,相互之間用逗號隔開。
表guestbook有三個字段:visitor,comments 和entrydate。visitor字段存儲訪問者的名字,comments字段存儲訪問者對你站點的意見,entrydate字段存儲訪問者訪問你站點的日期和時間。
注意每個字段名后面都跟有一個專門的表達式。例如,字段名comments后面跟有表達式TEXT。這個表達式指定了字段的數(shù)據類型。數(shù)據類型決定了一個字段可以存儲什么樣的數(shù)據。因為字段comments包含文本信息,其數(shù)據類型定義為文本型。
2、如何指定表的類型
你也可以在創(chuàng)建表時指定表的類型,如果不指定表的類型,在3.22及以前版本中缺省為ISAM表,在3.23版本中缺省為MyISAM表。你應該盡量使用MyISAM表。指定表的類型經常用于創(chuàng)建一個HEAP表:
mysql> CREATE TABLE fast(id int,articles TEXT) TYPE=HEAP;
3、隱含的列說明的改變
在某些情況下,MySQL隱含地改變在一個CREATE TABLE語句給出的一個列說明。(這也可能在ALTER TABLE。)長度小于4的VARCHAR被改變?yōu)镃HAR。如果在一個表中的任何列有可變長度,結果是整個行是變長的。因此, 如果一張表包含任何變長的列(VARCHAR、TEXT或BLOB),所有大于3個字符的CHAR列被改變?yōu)閂ARCHAR列。這在任何方面都不影響你如何使用列;在MySQL中,VARCHAR只是存儲字符的一個不同方法。MySQL實施這種改變,是因為它節(jié)省空間并且使表操作更快捷。
TIMESTAMP的顯示尺寸必須是偶數(shù)且在2 ~ 14的范圍內。如果你指定0顯示尺寸或比14大,尺寸被強制為14。從1~13范圍內的奇數(shù)值尺寸被強制為下一個更大的偶數(shù)。
你不能在一個TIMESTAMP列里面存儲一個文字NULL;將它設為NULL將設置為當前的日期和時間。因為TIMESTAMP列表現(xiàn)就是這樣,NULL和NOT NULL屬性不以一般的方式運用并且如果你指定他們,將被忽略。DESCRIBE tbl_name總是報告該TIMESTAMP列可能賦予了NULL值。
如果你想要知道MySQL是否使用了除你指定的以外的一種列類型,在創(chuàng)建或改變你的表之后,發(fā)出一個DESCRIBE tbl_name語句即可。
利用 SELECT 的結果創(chuàng)建表
關系數(shù)據庫的一個重要概念是,任何數(shù)據都表示為行和列組成的表,而每條 SELECT 語句的結果也都是一個行和列組成的表。在許多情況下,來自 SELECT 的“表”僅是一個隨著您的工作在顯示屏上滾動的行和列的圖像。在 MySQL 3.23 以前,如果想將 SELECT 的結果保存在一個表中以便以后的查詢使用,必須進行特殊的安排:
1) 運行 DESCRIBE 或 SHOW COLUMNS 查詢以確定想從中獲取信息的表中的列類型。
2) 創(chuàng)建一個表,明確地指定剛才查看到的列的名稱和類型。
3) 在創(chuàng)建了該表后,發(fā)布一條 INSERT ... SELECT 查詢,檢索出結果并將它們插入所創(chuàng)建的表中。
在 MySQL 3.23 中,全都作了改動。CREATE TABLE ... SELECT 語句消除了這些浪費時間的東西,使得能利用 SELECT 查詢的結果直接得出一個新表。只需一步就可以完成任務,不必知道或指定所檢索的列的數(shù)據類型。這使得很容易創(chuàng)建一個完全用所喜歡的數(shù)據填充的表,并且為進一步查詢作了準備。
如果你在CREATE語句后指定一個SELECT,MySQL將為在SELECT中所有的單元創(chuàng)鍵新字段。例如:
mysql> CREATE TABLE test
-> (a int not null auto_increment,primary key (a), key(b))
-> SELECT b,c from test2;
這將創(chuàng)建一個有3個列(a,b,c)的表,其中b,c列的數(shù)據來自表test2。注意如果在拷貝數(shù)據進表時發(fā)生任何錯誤,表將自動被刪除。
可以通過選擇一個表的全部內容(無 WHERE 子句)來拷貝一個表,或利用一個總是失敗的 WHERE 子句來創(chuàng)建一個空表,如:
mysql> CREATE TABLE test SELECT * from test2;
mysql> CREATE TABLE test SELECT * from test2 where 0;
如果希望利用 LOAD DATA 將一個數(shù)據文件裝入原來的文件中,而不敢肯定是否具有指定的正確數(shù)據格式時,創(chuàng)建空拷貝很有用。您并不希望在第一次未得到正確的選項時以原來表中畸形的記錄而告終。利用原表的空拷貝允許對特定的列和行分隔符用 LOAD DATA 的選項進行試驗,直到對輸入數(shù)據的解釋滿意時為止。在滿意之后,就可以將數(shù)據裝入原表了。
可結合使用 CREATE TEMPORARY TABLE 與 SELECT 來創(chuàng)建一個臨時表作為它自身的拷貝,如:
這允許修改 my_tbl 的內容而不影響原來的內容。在希望試驗對某些修改表內容的查詢,而又不想更改原表內容時,這樣做很有用。為了使用利用原表名的預先編寫的腳本,不需要為引用不同的表而編輯這些腳本;只需在腳本的起始處增加 CREATE TEMPORARY TABLE 語句即可。相應的腳本將創(chuàng)建一個臨時拷貝,并對此拷貝進行操作,當腳本結束時服務器會自動刪除這個拷貝。
關于MySQL中怎么操作數(shù)據表就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。