MySQL 操作詳解


MySQL 操作詳解

一、實驗簡介

本節實驗中學習並實踐 MySQL 上創建數據庫、創建表、查找信息等詳細的語法及參數使用方法。

二、創建並使用數據庫

1. 創建並選擇數據庫

使用SHOW語句找出服務器上當前存在什么數據庫:

mysql> SHOW DATABASES;

如果管理員在設置權限時為你創建了數據庫,你可以開始使用它。否則,你需要自己創建數據庫:

mysql> CREATE DATABASE test; 

在Unix下,數據庫名稱是區分大小寫的(不像SQL關鍵字),因此你必須總是以test訪問數據庫,而不能用TestTEST或其它一些變量。對表名也是這樣的。(在Windows下,該限制不適用,盡管你必須在一個給定的查詢中使用同樣的大小寫來引用數據庫和表。但是,由於多種原因,作為最好的慣例,一定要使用與數據庫創建時的同樣的大小寫。)

創建數據庫並不表示選定並使用它,你必須明確地操作。為了使test成為當前的數據庫,使用這個命令:

mysql> USE test 

數據庫只需要創建一次,但是必須在每次啟動mysql會話時在使用前先選擇它。你可以根據上面的例子執行一個USE語句來實現。

2. 創建表

創建數據庫是很容易的部分,較難的部分是決定你的數據庫結構應該是什么:你需要什么數據庫表,各數據庫表中有什么樣的列。

假如你需要建立一個包含你的每個寵物的記錄的表。它可稱為pet表,並且它應該至少包含每個動物的名字。因為名字本身不是很有趣,表應該包含另外的信息。例如,如果在你家豢養寵物人超過一個,你可能想要列出每個動物的主人。你可能也想要記錄例如寵物的種類和性別等基本的描述信息。

那么年齡呢?那聽起來可能有趣,但是如果將年齡存儲到數據庫中並不是那么簡單。年齡隨着時間流逝而變化,這意味着你將要不斷地更新你的記錄。相反,存儲一個固定值例如生日比較好,那么,無論何時你需要用到寵物的年齡,可以用當前日期和出生日期之間的差來計算它。MySQL提供了日期運算函數,因此並不困難。存儲出生日期而非年齡還有其它優點:

  1. 你可以使用數據庫完成這樣的任務:例如生成即將到來的寵物生日的提示。(如果你認為這類查詢有點蠢,注意,這與根據商務數據庫來識別出不久要發給生日祝賀的客戶是同一個問題。)

  2. 你可以相對於日期而不止是當前日期來計算年齡。例如,如果你在數據庫存儲死亡日期,你能很容易地計算出一只寵物死時有多大。

你可能想到pet表中其它有用信息,但是到目前為止這些已經足夠了:名字、主人、種類,性別、出生和死亡日期。

使用一個CREATE TABLE語句指定你的數據庫表的布局:

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), -> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE); 

此處輸入圖片的描述

VARCHAR適合於nameownerspecies列,因為這些列值的長度是可以變化的,這些列的長度不必都相同,而且不必是20。你可以選從1到65535選擇一個最合理的值作為列屬性值的長度。如果選擇得不合適,MySQL提供一個ALTER TABLE語句來修改表格(后來證明你需要一個更長的字段)。

動物性別可以由多個名稱表示,例如,"m"和"f",或"male"和"female"。使用單字符"m"和"f"是最簡單的方法。

很顯然,birthdeath列應選用DATE(日期)數據類型。

創建了數據庫表后,SHOW TABLES應該產生一些輸出:

mysql> SHOW TABLES;

此處輸入圖片的描述

為了驗證你的表是按你期望的方式創建,使用一個DESCRIBE語句:

mysql> DESCRIBE pet;

此處輸入圖片的描述

你可以隨時使用DESCRIBE,例如:你忘記表中的列的名稱或類型的時候。

3. 將數據加載到表中

創建表后,需要填入內容。通過LOAD DATAINSERT語句可以完成該任務。

假定你的寵物紀錄描述如下。(假定在MySQL中期望的日期格式是YYYY-MM-DD

此處輸入圖片的描述

因為你是從一個空表開始的,填充它的一個簡易方法是創建一個文本文件,每個動物各一行,然后用一個語句將文件的內容加載到表中。

你可以根據上面的寵物記錄創建一個文本文件“pet.txt”,每行包含一個記錄,用定位符(tab)把值分開,並且按照上面的CREATE TABLE語句中列出的次序依次填寫數據。對於丟失的值(例如未知的性別,或仍然活着的動物的死亡日期),你可以使用\N(反斜線,字母N)表示該值屬於NULL。例如,Whistler這只鳥的記錄應為(這里值之間的分割線實際上是一個定位符):

此處輸入圖片的描述

要想將文本文件“pet.txt”裝載到pet表中,使用這個命令:

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet; 

請注意如果用Windows中的編輯器(使用\r\n做為行的結束符)創建文件,應使用:

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet -> LINES TERMINATED BY '\r\n'; 

(在運行OS X的蘋果電腦上,應使用行結束符\r。)

如果你願意,你能明確地在LOAD DATA語句中指出列值的分隔符和行尾標記,但是默認標記是定位符和換行符。這對讀入文件“pet.txt”的語句已經足夠。

如果想要一次增加一個新記錄,可以使用INSERT語句。最簡單的形式是,提供每一列的值,其順序與CREATE TABLE語句中列的順序相同。假定Diane把一只新倉鼠取名為Puffball,你可以使用下面的INSERT語句添加一條新記錄:

mysql> INSERT INTO pet
    -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL); 

注意,這里字符串和日期值均為引號擴起來的字符串。另外,可以直接用INSERT語句插入NULL代表不存在的值。

4. 從表檢索信息

4.1 選擇所有的數據

從表中檢索所有記錄的最簡單方式是使用SELECT語句:

mysql> SELECT * FROM pet;

有可能你想到Bowser的生日看起來不太對。經過查詢,你發現正確的出生年份是1989,而不是1979。

那么現在至少有兩種修正方法:

  • 編輯文件“pet.txt”改正錯誤,然后使用DELETELOAD DATA清空並重新加載表:
mysql> DELETE FROM pet;
mysql> LOAD DATA LOCAL INFILE 'pet.txt' INTO TABLE pet; 

然而, 在這樣操作之前,需要重新輸入Puffball記錄。

  • 用一個UPDATE語句就可以修正錯誤記錄:
mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser'; 

UPDATE只更改有問題的記錄,並且不需要重新加載數據庫表。

4.2 選擇特殊行

由上一節內容可知,檢索整個表是容易的。只需要使用SELECT語句即可。但是一般情況下你不想檢索整個表的內容,特別地當表變得很大時。相反,你通常對解決一個具體的問題更感興趣,在這種情況下在你需要添加一些限制條件。讓我們學習如何做到這一點吧:

可以從表中只選擇特定的行。例如,如果你想要驗證你對Bowser的生日所做的更改是否正確或者生效,按下述方法選擇Bowser的記錄:

mysql> SELECT * FROM pet WHERE name = 'Bowser'; 

輸出證實正確的年份記錄為1989,而不是1979。

字符串比較時通常對大小寫不敏感,因此你可以將名字指定為"bowser"、"BOWSER"等,查詢結果相同。

你可以在任何列上指定條件,不只僅僅是name。例如,如果你想要知道哪個動物在1998以后出生的,嘗試篩選birth列:

mysql> SELECT * FROM pet WHERE birth > '1998-1-1'; 

還可以使用AND語句組合篩選條件,例如,找出雌性的狗:

mysql> SELECT * FROM pet WHERE species = 'dog' AND sex = 'f'; 

AND邏輯操作符,那么就有一個OR操作符:

mysql> SELECT * FROM pet WHERE species = 'snake' OR species = 'bird'; 

ANDOR可以混用,但ANDOR具有更高的優先級。如果你使用兩個操作符,最好是使用圓括號指明如何按條件分組:

mysql> SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm') -> OR (species = 'dog' AND sex = 'f'); 

4.3 選擇特殊列

如果你不想看到表中的所有行,就需要指明你感興趣的列名稱,並用逗號將列名分開。例如,如果你想要知道你的動物什么時候出生的,選擇namebirth列:

mysql> SELECT name, birth FROM pet;

找出擁有寵物的所有人,可以使用以下個查詢:

mysql> SELECT owner FROM pet;

請注意該查詢只是簡單地檢索每個記錄的owner列,但是他們有些名字出現多次。為了使輸出減到最少(避免重復),增加關鍵字DISTINCT檢索出每條唯一的輸出記錄:

mysql> SELECT DISTINCT owner FROM pet;

可以使用一個WHERE子句同時進行行選擇與列選擇。例如,要想查詢狗和貓的出生日期,使用以下查詢:

mysql> SELECT name, species, birth FROM pet
    -> WHERE species = 'dog' OR species = 'cat'; 

4.4 行分類

你可能已經注意到前面的例子中行並沒有以特定的順序顯示。然而,當行按某種方式排序時,檢查查詢輸出的時候通常變得相對簡單一點。為了給結果排序,使用ORDER BY子句。 這里是對動物生日按日期排序:

mysql> SELECT name, birth FROM pet ORDER BY birth;

由於字符串類型的數據對大小寫並不敏感。這意味着,對於大小寫不同其他都一樣的列,排序后的結果都不會更改。這種情況下,可以使用BINARY強制執行區分大小寫的排序功能,如:ORDER BY BINARY col_name

默認排序是升序,也就是最小的值排在第一。要想以降序排序,在你正在排序的列名旁邊增加DESC(降序 )關鍵字:

mysql> SELECT name, birth FROM pet ORDER BY birth DESC;

可以對多個列進行排序,並且可以按不同的方向對不同的列進行排序。例如,按升序對動物的種類進行排序,然后按降序根據生日對各動物種類進行排序(最年輕的動物在最前面),使用下列查詢:

mysql> SELECT name, species, birth FROM pet
    -> ORDER BY species, birth DESC;

注意DESC關鍵字僅適用於在它前面的列名(birth);不影響pecies列的排序順序。

4.5 日期計算

MySQL可以用來計算日期的函數,比如計算年齡或提取日期部分。

要想確定每個寵物有多大,可以使用函數TIMESTAMPDIFF()計算當前日期的年和出生日期之間的差也可以按照直接使用語句(YEAR(CURDATE())-YEAR(birth))計算,其中函數CURDATE()是計算當前的日期。如果當前日期的日歷年比出生日期早,則減去一年。以下代碼是查詢每個寵物的出生日期、當前日期和年齡(以年作為計算單位),其中關鍵字age是年齡這個計算結果的標簽。

mysql> SELECT name, birth, CURDATE(),
    -> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age -> FROM pet; # 比較這兩個查詢語句的結果 mysql> SELECT name, birth, CURDATE(), -> (YEAR(CURDATE())-YEAR(birth)) -> - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) AS age -> FROM pet; 

此處,YEAR()提取日期的年部分,RIGHT()提取日期最右面5個字符的MM-DD (月份和日期)部分。MM-DD值的表達式部分的值一般為10,如果CURDATE()的年比birth的年早,則年份應減去1。整個表達式看起來有些難懂,使用age來使輸出的列標記更有意義。

盡管查詢可行,但是人類的欲望是永無止盡的,如果以某個順序排列行,那么會使得瀏覽結果變得更加輕松。添加ORDER BY name子句則能夠實現按照名字進行排序輸出。

mysql> SELECT name, birth, CURDATE(),
    -> (YEAR(CURDATE())-YEAR(birth)) -> - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) -> AS age -> FROM pet ORDER BY name; 

為了按age而非name排序輸出,只要再使用一個ORDER BY子句:

mysql> SELECT name, birth, CURDATE(),
    -> (YEAR(CURDATE())-YEAR(birth)) -> - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) -> AS age -> FROM pet ORDER BY age; 

可以使用一個類似的查詢來確定已經死亡動物的死亡年齡。你通過檢查death值是否為NULL來確定是哪些動物已經死亡,然后對於那些非NULL值的動物,需要計算出deathbirth值之間的差來知道他們在這個世界上所存在的時間:

mysql> SELECT name, birth, death,
    -> (YEAR(death)-YEAR(birth)) - (RIGHT(death,5)<RIGHT(birth,5)) -> AS age -> FROM pet WHERE death IS NOT NULL ORDER BY age; 

查詢使用death IS NOT NULL而非death != NULL,因為NULL是特殊的值,不能使用普通比較符來比較。

如果你想要知道哪個動物下個月過生日怎么辦?對於這類計算,年和天是無關的,你只需要提取birth列的月份部分。MySQL提供幾個日期方面的提取函數,例如YEAR()MONTH()DAYOFMONTH()。在這里MONTH()是我們需要的函數。為了觀察它的實現原理,可以運行以下簡單的查詢顯示birthMONTH(birth)的值:

mysql> SELECT name, birth, MONTH(birth) FROM pet;

找出下個月生日的動物也很簡單。假定當前月是4月,那么月值是4,你需要找在5月出生的動物,方法是:

mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5; 

如果當前月份是12月,就有點復雜了。你不能只把1加到月份數(12)上並尋找在13月出生的動物,因為沒有這樣的月份。相反,你應尋找在1月出生的動物。

你甚至可以編寫查詢,不管當前月份是什么它都能執行。因此不必在查詢中使用一個特定的月份,DATE_ADD()允許在一個給定的日期上加上時間間隔。如果在NOW()值上加上一個月,然后用MONTH()提取月份,產生生日所在月份:

mysql> SELECT name, birth FROM pet
    -> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH)); 

完成該任務的另一個方法是加1得出當前月份的下一個月(在使用取模函數MOD()后,如果月份當前值是12,則“返回”到值0):

mysql> SELECT name, birth FROM pet
    -> WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1; 

注意,MONTH返回在112之間的一個數字,且MOD(something,12)返回在0和11之間的一個數字,因此必須在MOD()后加1,否則我們將從11月(11)跳到1月(1)。

4.6 NULL值操作

NULL值可能令人感到奇怪因此你需要習慣它。概念上,NULL意味着“沒有值”或“未知值”,並且它被看作使與眾不同的值。為了測試NULL,你不能使用算術比較操作符例如=<!=。為了了解它,試試下列查詢:

mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL; 

此處輸入圖片的描述

很顯然你不能通過這些得到有意義的結果,因為任何使用算數比較操作符對NULL進行比較的結果都是NULL。因此使用IS NULLIS NOT NULL操作符:

mysql> SELECT 1 IS NULL, 1 IS NOT NULL; 

此處輸入圖片的描述

請注意在MySQL中,0NULL意味着假而其它值意味着真。布爾運算的默認真值是1

為了查詢出哪個動物不再是活着的,使用death IS NOT NULL而不使用death != NULL的原因。

GROUP BY中,兩個NULL值被視為相同等價的。

執行ORDER BY語句排序時,如果運行ORDER BY ... ASC,則NULL值出現在最前面,若運行ORDER BY ... DESC,則NULL值出現在最后面。

NULL操作的常見錯誤是認為不能在定義為NOT NULL的列內插入0或空字符串,但事實並非如此。這樣的結果是在NULL表示"沒有數值"的時候恰恰是有數值0存在的。因此使用IS [NOT] NULL則可以很容易地進行區分,如下所示:

mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL; 

因此完全可以在定義為NOT NULL的列內插入0或空字符串,因為它們實際是NOT NULL

4.7 模式匹配

MySQL提供標准的SQL模式匹配,以及一種基於類Unix里的程序如vigrepsed里的擴展正則表達式模式匹配的格式。 SQL模式匹配允許你使用“_”匹配任何單個字符,而“%”匹配任意數目字符(包括零字符)。在 MySQL中,SQL的模式默認是忽略大小寫的。下面給出一些例子。注意使用SQL模式時,不能使用=!=;而應使用LIKENOT LIKE比較操作符。 要想找出以“b”開頭的名字:

mysql> SELECT * FROM pet WHERE name LIKE 'b%'; 

要想找出以“fy”結尾的名字:

mysql> SELECT * FROM pet WHERE name LIKE '%fy'; 

要想找出包含“w”的名字:

mysql> SELECT * FROM pet WHERE name LIKE '%w%'; 

要想找出正好包含5個字符的名字,使用“_”模式字符:

mysql> SELECT * FROM pet WHERE name LIKE '_____'; 

由MySQL提供的模式匹配的其它類型是使用擴展正則表達式。當你對這類模式進行匹配測試時,使用REGEXPNOT REGEXP操作符(或RLIKENOT RLIKE,它們是同義詞)。

擴展正則表達式的一些字符是:

  • ‘.’匹配任何單個的字符。

  • 字符類“[...]”匹配在方括號內的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。為了命名字符的范圍,使用一個“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何數字。

  • “ ”匹配零個或多個在它前面的字符。例如,“x”匹配任何數量的“x”字符,“[0-9]”匹配任何數量的數字,而“.”匹配任何數量的任何字符。

如果REGEXP模式與被測試值的任何地方匹配,模式就匹配(這不同於LIKE模式匹配,只有與整個值匹配,模式才匹配)。 為了定位一個模式以便它必須匹配被測試值的開始或結尾,在模式開始處使用“^”或在模式的結尾用“$”。 為了說明擴展正則表達式如何工作,下面使用REGEXP重寫上面所示的LIKE查詢:

為了找出以“b”開頭的名字,使用“^”匹配名字的開始:

mysql> SELECT * FROM pet WHERE name REGEXP '^b'; 

如果你想強制使REGEXP比較區分大小寫,使用BINARY關鍵字使其中一個字符串變為二進制字符串。該查詢只匹配名稱首字母的小寫‘b’。

mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b'; 

為了找出以“fy”結尾的名字,使用“$”匹配名字的結尾:

mysql> SELECT * FROM pet WHERE name REGEXP 'fy$'; 

為了找出包含一個“w”的名字,使用以下查詢:

mysql> SELECT * FROM pet WHERE name REGEXP 'w'; 

既然如果一個正則表達式出現在值的任何地方,他就會被模式匹配,就不必在先前的查詢中在模式的兩側放置一個通配符以使得它匹配整個值,就像你使用了一個SQL模式那樣。

為了找出包含正好5個字符的名字,使用“^”和“$”匹配名字的開始和結尾,和5個“.”實例在兩者之間:

mysql> SELECT * FROM pet WHERE name REGEXP '^.....$'; 

你也可以使用“{n}”重復n次操作符,重寫前面的查詢:

mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$'; 

4. 計算行數

數據庫經常用於回答這個問題,“查詢出某個類型的數據在表中出現的頻數是多少?”

例如,你可能想要知道你有多少寵物,或每位主人有多少寵物,或你可能想要對你的動物進行各種類型的普查。

計算你擁有動物的總數目與“在pet表中有多少行?”是同樣的問題,因為每個寵物都對應一條記錄。COUNT(*)函數計算行數,所以計算動物數目的查詢應為:

mysql> SELECT COUNT(*) FROM pet; 

在前面的章節中,你檢索了擁有寵物的人的名字。如果你想要知道每個主人有多少寵物,你也可以使用COUNT(*)函數:

mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;

注意,使用GROUP BY對每個owner的所有記錄分組,沒有它,你會得到錯誤消息:

mysql> SELECT owner, COUNT(*) FROM pet;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause 

COUNT(*)GROUP BY以各種形式分類你的數據。下列例子顯示出以不同方式進行動物普查操作。

查看每種動物的數量:

mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;

查看每種性別的動物數量:

mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;

按種類和性別組合分類的動物數量:

mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;

若使用COUNT(*),你不必檢索整個表。例如, 當只對狗和貓進行查詢時,應為:

mysql> SELECT species, sex, COUNT(*) FROM pet
    -> WHERE species = 'dog' OR species = 'cat' -> GROUP BY species, sex; 

或,如果你僅需要知道已知性別的按性別分組的動物數目:

mysql> SELECT species, sex, COUNT(*) FROM pet
    -> WHERE sex IS NOT NULL -> GROUP BY species, sex; 

4.9 使用1個以上的表

pet表追蹤你擁有的寵物。如果你想要記錄其它相關信息,例如在他們看獸醫的情況或后代出生的情況,那么你需要另外的表。這張表應該擁有些什么呢?它需要:

  • 需要包含寵物名字以便你知道每個發生的事件屬於哪個動物。
  • 需要一個日期以便你知道事件是什么時候發生的。
  • 需要一個描述事件的字段。
  • 如果你想要對事件進行分類,則需要一個事件類型字段。

綜上所述,event表的CREATE TABLE語句應為:

mysql> CREATE TABLE event (name VARCHAR(20), date DATE,
    -> type VARCHAR(15), remark VARCHAR(255)); 

類似於於pet表,最簡單的方法是創建一個用定位符分隔的文本文件來加載載初始記錄:

此處輸入圖片的描述

采用如下方式加載記錄:

mysql> LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE event; 

由於你已經在pet表上的查詢中學到了一定的知識,你應該能執行對event表中記錄的檢索;原理是一樣的。但是有沒有event表本身不能回答你可能問的問題呢?

當寵物們生了了一窩小動物時,假定你想要找出這時候每只寵物的年齡。我們前面看到了如何通過兩個日期計算年齡。event表中有母親的生產日期,但是為了計算母親的年齡,你需要她的出生日期,存儲在pet表中。說明查詢需要兩個表:

mysql> SELECT pet.name,
    -> (YEAR(date)-YEAR(birth)) - (RIGHT(date,5)<RIGHT(birth,5)) AS age, -> remark -> FROM pet, event -> WHERE pet.name = event.name AND event.type = 'litter'; 

關於該查詢要注意以下幾件事:

  • FROM子句連接兩個表,因為查詢需要從兩個表中提取信息。
  • 當從多個表組合(聯結)信息時,你需要指定其中一個表中的列明以期匹配其它表的列名。這很簡單,因為它們都有一個name列,查詢可以通過使用WHERE子句基於name值來匹配兩個表中的記錄。

  • 因為name列都存在兩個表中,因此當引用該列時,一定要指定是哪個表,把表名附在列名前即可以實現。 如果你想要將一個表的記錄與該表的其它記錄進行比較,可以將該表聯結到自身。例如,為了在你的寵物之中選擇繁殖中的配偶,你可以用pet表聯結自身來進行相同種類的雄雌配對:

mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
    -> FROM pet AS p1, pet AS p2 -> WHERE p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm'; 

在這個查詢中,我們為表名指定別名p1p2以便能引用它們的列並且使得每一個列的引用更直觀。

三、獲得數據庫和表的信息

如果你忘記數據庫或表的名字,或給定的表的結構是什么(例如,它的列叫什么),怎么辦?MySQL提供一些語句解決這個問題。 你已經知道SHOW DATABASES可以列出由服務器管理的所有數據庫。為了找出當前選擇了哪個數據庫,使用DATABASE()函數:

mysql> SELECT DATABASE(); 

如果你還沒選擇任何數據庫,結果是NULL

為了找出當前的數據庫包含什么表(例如,當你不能確定一個表的名字),使用這個命令:

mysql> SHOW TABLES;

如果你想要知道一個表的結構,可以使用DESCRIBE命令;它顯示表中每個列的信息:

mysql> DESCRIBE pet;

Field顯示列名字,Type是列的數據類型,Null表示列是否能包含NULL值,key顯示列是否被索引而Default指定列的默認值。

如果表有索引,SHOW INDEX FROM tbl_name生成有關索引的信息。

四、作業

請將以上的操作在實驗樓的環境下執行,並把結果截圖,把你們在這個過程中遇到的問題以及解決方案寫入到實驗報告中,遇到問題歡迎到 討論區 與同學老師交流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM