<!-- /* Font Definitions */ @font-face {font-family:"MS 明朝"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-alt:"MS Mincho"; mso-font-charset:128; mso-generic-font-family:roman; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:宋体; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:Century; panose-1:2 4 6 4 5 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"/@SimSun"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@MS 明朝"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-charset:128; mso-generic-font-family:roman; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0mm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:Century; mso-fareast-font-family:"MS 明朝"; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:99.25pt 30.0mm 30.0mm 30.0mm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->
多表操作
在一个数据 库 中,可能存在多个表, 这 些表都是相互 关联 的。我 们继续 使用前面的例子。前面建立的表中包含了 员 工的一些基本信息,如姓名、性 别 、出生日期、出生地。我 们 再 创 建一个表, 该 表用于描述 员 工所 发 表的文章,内容包括作者姓名、文章 标题 、 发 表日期。
1 、 查 看第一个表 mytable 的内容:
mysql> select * from mytable;
+----------+------+------------+-----------+
| name | sex | birth | birthaddr |
+----------+------+------------+-----------+
| abccs |f | 1977-07-07 | china |
| mary |f | 1978-12-12 | usa |
| tom |m | 1970-09-02 | usa |
+----------+------+------------+-----------+
2 、 创 建第二个表 title (包括作者、文章 标题 、 发 表日期) :
mysql> create table title(writer varchar(20) not null,
-> title varchar(40) not null,
-> senddate date);
向 该 表中填加 记录 ,最后表的内容如下:
<ccid_nobr>
<table width="400" border="1" cellspacing="0" cellpadding="2"
bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
<tr>
<td bgcolor="e6e6e6" class="code" style="font-size:9pt">
<pre><ccid_code> mysql> select * from title;
+--------+-------+------------+
| writer | title | senddate |
+--------+-------+------------+
| abccs | a1 | 2000-01-23 |
| mary | b1 | 1998-03-21 |
| abccs | a2 | 2000-12-04 |
| tom | c1 | 1992-05-16 |
| tom | c2 | 1999-12-12 |
+--------+-------+------------+
5 rows in set (0.00sec)
3 、多表 查询
现 在我 们 有了两个表 : mytable 和 title 。利用 这 两个表我 们 可以 进 行 组 合 查询 :
例如我 们 要 查询 作者 abccs 的姓名、性 别 、文章:
mysql> SELECT name,sex,title FROM mytable,title
-> WHERE name=writer AND name=′abccs′;
+-------+------+-------+
| name | sex | title |
+-------+------+-------+
| abccs | f | a1 |
| abccs | f | a2 |
+-------+------+-------+
上面例子中,由于作者姓名、性 别 、文章 记录 在两个不同表内,因此必 须 使用 组 合来 进 行 查询 。必 须 要指定一个表中的 记录 如何与其它表中的 记录进 行匹配。
注意:如果第二个表 title 中的 writer 列也取名 为 name (与 mytable 表中的 name 列相同)而不是 writer 时 ,就必 须 用 mytable.name 和 title.name 表示,以示区 别 。
再 举 一个例子,用于 查询 文章 a2 的作者、出生地和出生日期:
mysql> select title,writer,birthaddr,birth from mytable,title
-> where mytable.name=title.writer and title=′a2′;
+-------+--------+-----------+------------+
| title | writer | birthaddr | birth |
+-------+--------+-----------+------------+
| a2 | abccs | china | 1977-07-07 |
+-------+--------+-----------+------------+
修改和 备 份、批 处 理
有 时 我 们 要 对 数据 库 表和数据 库进 行修改和 删 除,可以用如下方法 实现 :
1 、增加一列:
如在前面例子中的 mytable 表中增加一列表示是否 单 身 single:
mysql> alter table mytable add column single char(1);
2 、修改 记录
将 abccs 的 single 记录 修改 为 “y” :
mysql> update mytable set single=′y′ where name=′abccs′; 现 在来看看 发 生了什 么 :
mysql> select * from mytable;
+----------+------+------------+-----------+--------+
| name | sex | birth | birthaddr | single |
+----------+------+------------+-----------+--------+
| abccs |f | 1977-07-07 | china | y |
| mary |f | 1978-12-12 | usa | NULL |
| tom |m | 1970-09-02 | usa | NULL |
+----------+------+------------+-----------+--------+
3 、增加 记录
前面已 经讲过 如何增加一条 记录 , 为 便于 查 看,重 复 与此:
mysql> insert into mytable
-> values (′abc′,′f′,′1966-08-17′,′china′,′n′);
Query OK, 1 row affected (0.05 sec)
查 看一下:
mysql> select * from mytable;
+----------+------+------------+-----------+--------+
| name | sex | birth | birthaddr | single |
+----------+------+------------+-----------+--------+
| abccs |f | 1977-07-07 | china | y |
| mary |f | 1978-12-12 | usa | NULL |
| tom |m | 1970-09-02 | usa | NULL |
| abc |f | 1966-08-17 | china | n |
+----------+------+------------+-----------+--------+
4 、 删 除 记录
用如下命令 删 除表中的一条 记录 : mysql> delete from mytable where name=′abc′;
DELETE 从表中 删 除 满 足由 where 给 出的条件的一条 记录 。
再 显 示一下 结 果:
mysql> select * from mytable;
+----------+------+------------+-----------+--------+
| name | sex | birth | birthaddr | single |
+----------+------+------------+-----------+--------+
| abccs |f | 1977-07-07 | china | y |
| mary |f | 1978-12-12 | usa | NULL |
| tom |m | 1970-09-02 | usa | NULL |
+----------+------+------------+-----------+--------+
5 、 删 除表:
mysql> drop table ****( 表 1 的名字 ) , *** 表 2 的名字 ;
可以 删 除一个或多个表,小心使用。
6 、数据 库 的 删 除:
mysql> drop database 数据 库 名 ;
小心使用。
7 、数据 库 的 备 份:
退回到 DOS :
mysql> quit
d:mysqlbin
使用如下命令 对 数据 库 abccs 进 行 备 份:
mysqldump --opt abccs>abccs.dbb
abccs.dbb 就是你的数据 库 abccs 的 备 份文件。
8 、用批 处 理方式使用 MySQL:
首先建立一个批 处 理文件 mytest.sql, 内容如下:
use abccs;
select * from mytable;
select name,sex from mytable where name=′abccs′;
在 DOS 下运行如下命令: d:mysqlbin mysql < mytest.sql
在屏幕上会 显 示 执 行 结 果。
如果想看 结 果,而 输 出 结 果很多, 则 可以用 这样 的命令: mysql < mytest.sql | more
我 们还 可以将 结 果 输 出到一个文件中: mysql < mytest.sql > mytest.out