?? manual_tutorial.html
字號:
<li>你可以相對于日期而不止是當前日期來計算年齡。例如,如果你在數據庫存儲死亡日期,你能容易計算一只寵物是何時多大死的。
</li>
</ul>
<p>你可能想到<code>pet</code>表中其他有用的其他類型信息,但是到目前為止這些現在是足夠了:名字、主人、種類,性別、出生和死亡日期。
</p>
<p>使用一個<code>CREATE TABLE</code>語句指定你的數據庫表的布局: </p>
<pre>mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
</pre>
<p><code>VARCHAR</code>對<code>name</code>、<code>owner</code>和<code>species</code>列是個好的選擇,因為列值將會是變長的。這些列的長度都不必是相同的,而且不必是<code>20</code>。你可以挑選從<code>1</code>到<code>255</code>的任何長度,無論哪個對你來說好象最合理。(如果你做了較差的選擇,以后會變得你需要一個更長的字段,<strong>MySQL</strong>提供一個<code>ALTER
TABLE</code>語句。)</p>
<p>動物性表可以用許多方法表示,例如,<code>"m"</code>和<code>"f"</code>,或也許<code>"male"</code>和<code>"female"</code>。使用單個字符<code>"m"</code>和<code>"f"</code>是最簡單的。
</p>
<p>為<code>birth</code>和<code>death</code>列使用<code>DATE</code>數據類型是相當明顯的選擇。
</p>
<p>既然你創建了一個表,<code>SHOW TABLES</code>應該產生一些輸出: </p>
<pre>mysql> SHOW TABLES;
+---------------------+
| Tables in menagerie |
+---------------------+
| pet |
+---------------------+
</pre>
<p>為了驗證你的表是按你期望的方式被創建,使用一個<code>DESCRIBE</code>語句:
</p>
<pre>mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
</pre>
<p>你能隨時<code>DESCRIBE</code>,例如,如果你忘記在你表中的列的名字或他們是什么類型。
</p>
<h3><a NAME="Loading_tables" HREF="manual_toc.html#Loading_tables">8.4.3
將數據裝入一個數據庫表</a></h3>
<p>在你創建表后,你需要充實它。<code>LOAD DATA</code>和<code>INSERT</code>語句用于此。
</p>
<p>假定你的寵物紀錄描述如下。(觀察到<strong>MySQL</strong>期望日期時以<code>YYYY-MM-DD</code>格式;這可能與你習慣的不同。)</p>
<table border="1" width="100%" NOSAVE class="p4">
<tbody>
<tr>
<td><strong>name</strong> </td>
<td><strong>owner</strong> </td>
<td><strong>species</strong> </td>
<td><strong>sex</strong> </td>
<td><strong>birth</strong> </td>
<td><strong>death</strong> </td>
</tr>
<tr>
<td>Fluffy </td>
<td>Harold </td>
<td>cat </td>
<td>f </td>
<td>1993-02-04 </td>
<td> </td>
</tr>
<tr>
<td>Claws </td>
<td>Gwen </td>
<td>cat </td>
<td>m </td>
<td>1994-03-17 </td>
<td> </td>
</tr>
<tr>
<td>Buffy </td>
<td>Harold </td>
<td>dog </td>
<td>f </td>
<td>1989-05-13 </td>
<td> </td>
</tr>
<tr>
<td>Fang </td>
<td>Benny </td>
<td>dog </td>
<td>m </td>
<td>1990-08-27 </td>
<td> </td>
</tr>
<tr>
<td>Bowser </td>
<td>Diane </td>
<td>dog </td>
<td>m </td>
<td>1998-08-31 </td>
<td>1995-07-29 </td>
</tr>
<tr>
<td>Chirpy </td>
<td>Gwen </td>
<td>bird </td>
<td>f </td>
<td>1998-09-11 </td>
<td> </td>
</tr>
<tr>
<td>Whistler </td>
<td>Gwen </td>
<td>bird </td>
<td> </td>
<td>1997-12-09 </td>
<td> </td>
</tr>
<tr>
<td>Slim </td>
<td>Benny </td>
<td>snake </td>
<td>m </td>
<td>1996-04-29 </td>
<td> </td>
</tr>
</tbody>
</table>
<p>因為你是從一張空表開始的,充實它的一個容易方法是創建包含為你的動物各一行一個文本文件,然后用一個單個語句裝載文件的內容到表中。
</p>
<p>你可以創建一個文本文件<tt>“pet.txt”</tt>,每行包含一個記錄,用定位符(tab)把值分開,并且以在<code>CREATE
TABLE</code>語句中列出的列次序給出。對于丟失的值(例如未知的性別,或仍然活著的動物的死亡日期),你可以使用<code>NULL</code>值。為了在你的文本文件表示這些,使用<code>\N</code>。例如,對Whistler鳥的記錄看起來像這樣的(這里在值之間的空白是一個單個的定位字符):</p>
<table border="1" width="100%" NOSAVE class="p4">
<tbody>
<tr>
<td><code>Whistler</code> </td>
<td><code>Gwen</code> </td>
<td><code>bird</code> </td>
<td><code>\N</code> </td>
<td><code>1997-12-09</code> </td>
<td><code>\N</code> </td>
</tr>
</tbody>
</table>
<p>為了裝載文本文件<tt>“pet.txt”</tt>到<code>pet</code>表中,使用這個命令:
</p>
<pre>mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
</pre>
<p>如果你愿意,你能明確地在<code>LOAD DATA</code>語句中指出列值的分隔符和行尾標記,但是缺省是定位符和換行符。這些對爭取讀入文件<tt>“pet.txt”</tt>的語句是足夠的。
</p>
<p>當你想要一次增加一個新記錄時,<code>INSERT</code>語句是有用的。在它最簡單的形式,你為每一列提供值,以列在<code>CREATE
TABLE</code>語句被列出的順序。假定Diane把一只新倉鼠命名為Puffball,你可以使用一個這樣<code>INSERT</code>語句增加一條新記錄:
</p>
<pre>mysql> INSERT INTO pet
-> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
</pre>
<p>注意,這里字符串和日期值被指定為引號擴起來的字符串。另外,用<code>INSERT</code>,你能直接插入<code>NULL</code>代表不存在的值。你不能使用<code>\N</code>,就像你用<code>LOAD
DATA</code>做的那樣。 </p>
<p>從這個例子,你應該能看到涉及很多的鍵入用多個<code>INSERT</code>語句而非單個<code>LOAD
DATA</code>語句裝載你的初始記錄。 </p>
<h3><a NAME="Retrieving_data" HREF="manual_toc.html#Retrieving_data">8.4.4
從一個數據庫表檢索信息</a></h3>
<p><code>SELECT</code>語句被用來從一張桌子拉出信息。語句的一般格式是:
</p>
<pre>SELECT what_to_select
FROM which_table
WHERE conditions_to_satisfy
</pre>
<code>
<p>what_to_select</code>指出你想要看到的,這可以是列的一張表,或<code>*</code>表明“所有的列”。<code>which_table</code>指出你想要從其檢索數據的表。<code>WHERE</code>子句是可選的,如果它在,<code>conditions_to_satisfy</code>指定行必須滿足的檢索條件。
</p>
<h4><a NAME="Selecting_all" HREF="manual_toc.html#Selecting_all">8.4.4.1
選擇所有數據</a></h4>
<p><code>SELECT</code>最簡單的形式是從一張表中檢索每樣東西: </p>
<pre>mysql> SELECT * FROM pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1998-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+--------+---------+------+------------+------------+
</pre>
<p>如果你想要考察整個表,這種形式的<code>SELECT</code>是很有用的。例如,在你剛剛給它裝載了你的初始數據集裝以后。當它發生時,剛才顯示的輸出揭示了在你的數據文件的一個錯誤:在Bowser死了以后,它好象要出生了!請教你原來的家譜,你發現正確的出生年是1989,而不是1998。
</p>
<p>至少有一些修正它的方法:
<ul>
<li>編輯文件<tt>“pet.txt”</tt>改正錯誤,然后使用<code>DELETE</code>和<code>LOAD
DATA</code>弄空表并且再次裝載它: <pre>mysql> DELETE FROM pet;
mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
</pre>
<p>然而, 如果你這樣做,你必須重新輸入Puffball記錄。 </p>
</li>
<li>用一個<code>UPDATE</code>語句僅修正錯誤記錄: <pre>mysql> UPDATE pet SET birth = "1989-08-31" WHERE name = "Bowser";
</pre>
</li>
</ul>
<p>如上所示,檢索整個表是容易的,但是一般你不想那樣做,特別地當表變得很大時。相反,你通常對回答一個特別的問題更感興趣,在這種情況下你在你想要的信息上指定一些限制。讓我們看一些他們回答有關你寵物的問題的選擇查詢。
</p>
<h4><a NAME="Selecting_rows" HREF="manual_toc.html#Selecting_rows">8.4.4.2 選擇特定行</a></h4>
<p>你能從你的表中只選擇特定的行。例如,如果你想要驗證你對Bowser的出生日期所做的改變,像這樣精選Bowser的記錄:
</p>
<pre>mysql> SELECT * FROM pet WHERE name = "Bowser";
+--------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+-------+---------+------+------------+------------+
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+-------+---------+------+------------+------------+
</pre>
<p>輸出證實年份現在正確記錄為1989,而不是1998。 </p>
<p>字符串比較通常是大小些無關的,因此你可以指定名字為<code>"bowser"</code>、"BOWSER"等等,查詢結果將是相同的。
</p>
<p>你能在任何列上指定條件,不只是<code>name</code>。例如,如果你想要知道哪個動物在1998以后出生的,測試<code>birth</code>列:
</p>
<pre>mysql> SELECT * FROM pet WHERE birth >= "1998-1-1";
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+-------+---------+------+------------+-------+
</pre>
<p>你能組合條件,例如,找出雌性的狗: </p>
<pre>mysql> SELECT * FROM pet WHERE species = "dog" AND sex = "f";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
</pre>
<p>上面的查詢使用<code>AND</code>邏輯操作符,也有一個<code>OR</code>操作符:
</p>
<pre>mysql> SELECT * FROM pet WHERE species = "snake" OR species = "bird";
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
+----------+-------+---------+------+------------+-------+
</pre>
<p><code>AND</code>和<code>OR</code>可以混用。如果你這樣做,使用括號指明條件應該如何被分組是一個好主意:
</p>
<pre>mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m")
-> OR (species = "dog" AND sex = "f");
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
</pre>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -