⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 manual_tutorial.html

📁 MySQL参考手册中文版
💻 HTML
📖 第 1 页 / 共 5 页
字号:
  <li>你可以相对于日期而不止是当前日期来计算年龄。例如,如果你在数据库存储死亡日期,你能容易计算一只宠物是何时多大死的。 
  </li>
</ul>

<p>你可能想到<code>pet</code>表中其他有用的其他类型信息,但是到目前为止这些现在是足够了:名字、主人、种类,性别、出生和死亡日期。 
</p>

<p>使用一个<code>CREATE TABLE</code>语句指定你的数据库表的布局: </p>

<pre>mysql&gt; CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
    -&gt; 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>&quot;m&quot;</code>和<code>&quot;f&quot;</code>,或也许<code>&quot;male&quot;</code>和<code>&quot;female&quot;</code>。使用单个字符<code>&quot;m&quot;</code>和<code>&quot;f&quot;</code>是最简单的。 
</p>

<p>为<code>birth</code>和<code>death</code>列使用<code>DATE</code>数据类型是相当明显的选择。 
</p>

<p>既然你创建了一个表,<code>SHOW TABLES</code>应该产生一些输出: </p>

<pre>mysql&gt; SHOW TABLES;
+---------------------+
| Tables in menagerie |
+---------------------+
| pet                 |
+---------------------+
</pre>

<p>为了验证你的表是按你期望的方式被创建,使用一个<code>DESCRIBE</code>语句: 
</p>

<pre>mysql&gt; 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&gt; LOAD DATA LOCAL INFILE &quot;pet.txt&quot; 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&gt; INSERT INTO pet
    -&gt; 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&gt; 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&gt; DELETE FROM pet;
mysql&gt; LOAD DATA LOCAL INFILE &quot;pet.txt&quot; INTO TABLE pet;
</pre>
    <p>然而, 如果你这样做,你必须重新输入Puffball记录。 </p>
  </li>
  <li>用一个<code>UPDATE</code>语句仅修正错误记录: <pre>mysql&gt; UPDATE pet SET birth = &quot;1989-08-31&quot; WHERE name = &quot;Bowser&quot;;
</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&gt; SELECT * FROM pet WHERE name = &quot;Bowser&quot;;
+--------+-------+---------+------+------------+------------+
| name   | owner | species | sex  | birth      | death      |
+--------+-------+---------+------+------------+------------+
| Bowser | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+-------+---------+------+------------+------------+
</pre>

<p>输出证实年份现在正确记录为1989,而不是1998。 </p>

<p>字符串比较通常是大小些无关的,因此你可以指定名字为<code>&quot;bowser&quot;</code>、&quot;BOWSER&quot;等等,查询结果将是相同的。 
</p>

<p>你能在任何列上指定条件,不只是<code>name</code>。例如,如果你想要知道哪个动物在1998以后出生的,测试<code>birth</code>列: 
</p>

<pre>mysql&gt; SELECT * FROM pet WHERE birth &gt;= &quot;1998-1-1&quot;;
+----------+-------+---------+------+------------+-------+
| 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&gt; SELECT * FROM pet WHERE species = &quot;dog&quot; AND sex = &quot;f&quot;;
+-------+--------+---------+------+------------+-------+
| 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&gt; SELECT * FROM pet WHERE species = &quot;snake&quot; OR species = &quot;bird&quot;;
+----------+-------+---------+------+------------+-------+
| 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&gt; SELECT * FROM pet WHERE (species = &quot;cat&quot; AND sex = &quot;m&quot;)
    -&gt; OR (species = &quot;dog&quot; AND sex = &quot;f&quot;);
+-------+--------+---------+------+------------+-------+
| 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 + -