(一)启动mysql并进入mysql

我的mysql存放在E://mysql目录中

点击windows的开始按钮--->运行----->输入cmd 回车---->进入虚拟dos环境

Microsoft Windows XP [Version 5.1.2600] 
    
(C) Copyright 1985-2001 Microsoft Corp. 
    
C:/Documents and Settings/lsk>E: 
    
E:/>cd mysql 
    
E:/mysql>cd bin 
    
E:/mysql/bin>mysql -u root -p 
    
Enter password:

    <---------这里如果直接按回车就表示不设定密码否则的话

                                      就要输入密码

Welcome to the MySQL monitor.  Commands end with ; or /g. 
    
Your MySQL connection id is 2 to server version: 
    
      5.1.6 
    -alpha-nt-max 
    
Type 'help;' or '/h' for help. Type '/c' to clear the buffer. 
    
mysql>

这表示我们已经成功的进入了mysql

mysql> show databases;  --------->显示所有的数据库 
    
+---------------------+ 
    
| Database            | 
    
+---------------------+ 
    
| information_schema  | 
    
| booksys             | --------->已经存在了一个我建的数据库 
    
| cluster_replication | 
    
| mysql               | 
    
| test                | 
    
+---------------------+ 
    
5 rows in set (0.00 sec) 
    
mysql>

我在之前已经建立了一个booksys数据库,其它的数据库是mysql自带的。

mysql> use booksys;    ---------->使用booksys这个数据库 
     
Database changed 
    
mysql> show tables;    ---------->显示booksys这个数据库的所有表 
    
+-------------------+ 
    
| Tables_in_booksys | 
    
+-------------------+ 
    
| reader            | 
    
+-------------------+ 
    
1 row in set (0.00 sec)

如果想删除某个数据库的话只需使用drop database 数据名;

退出数据库只要

mysql>quit;就可以

 

(二)创建与删除表

那么这个表是如何建立的呢?

我们用的是creat命令。

表是数据库的最基本元素之一,表与表之间可以相互独立,也可以相互关联。创建表的基本语法如下:

create table table_name 
    
(column_name datatype {identity |null|not null}, 
    
…)

其中参数table_name和column_name必须满足用户数据库中的识别器(identifier)的要求,

参数datatype是一个标准的SQL类型或由用户数据库提供的类型。用户要使用non-null

从句为各字段输入数据。 create table还有一些其他选项,如创建临时表和使用select子句从

其他的表中读取某些字段组成新表等。还有,在创建表是可用PRIMARY KEY、KEY、INDEX等标识

符设定某些字段为主键或索引等。

书写上要注意:

1.在一对圆括号里的列出完整的字段清单。

2.字段名间用逗号隔开。

3.字段名间的逗号后要加一个空格。

4.最后一个字段名后不用逗号。

5.所有的SQL陈述都以分号";"结束。

我们建的表是:

creat table reader 
    
( 
    
    id int, 
    
    name char(16), 
    
    borrow_book_id int, 
    
    borrow_date Date 
    
);

我们可以列出表中字段清单:

mysql> show columns from reader;--------->察看表清单的命令 
    
+----------------+----------+------+-----+---------+-------+ 
    
| Field          | Type     | Null | Key | Default | Extra | 
    
+----------------+----------+------+-----+---------+-------+ 
    
| id             | int(11)  | YES  |     | NULL    |       | 
    
| name           | char(16) | YES  |     | NULL    |       | 
    
| borrow_book_id | int(11)  | YES  |     | NULL    |       | 
    
| borrow_date    | date     | YES  |     | NULL    |       | 
    
+----------------+----------+------+-----+---------+-------+

我们的表中现在并没有任何内容。

如果想删除表的话只需输入drop table reader;

 

 

(三)向表中插入数据

我们刚才用creat建立的表仅仅是一张空表,里面没有任何有用的数据,那我们如何才能向表中写入数据呢?

答案当然是使用insert语句。

向表中添加一行在sql中是最简单的概念之一。

mysql支持sql的标准用法:

insert into table_name(column1, column2,...,column3)

values (value1,value2,...,value3);

如我们的表向其中插入一行数据的话就可以这样用:

insert into reader(id,name,borrow_book_id,borrow_date)

values (1,'liushangkun',4,' 2007-05-25 ');

Mysql同样支持非标准的insert语句调用,我就是这样插入数据的,可以一次插入多行:

insert into reader values(1,'liushangkun',4,' 
    
      2007-05-25 
    '), 
    
                          (2,'zhaowei',3,' 
    
      2007-05-23 
    '), 
    
                          ....  ....   .... ... 
    
                          (7,'yuchi',19,' 
    
      2007-05-21 
    ');

mysql> select *from reader; ------------>查询表中所有属性的内容

+------+---------------+----------------+-------------+ 
    
| id   | name          | borrow_book_id | borrow_date | 
    
+------+---------------+----------------+-------------+ 
    
|    1 | liushangkun   |              4 | 
    
      2007-05-25 
      | 
    
|    2 | zhaowei       |              3 | 
    
      2007-05-23 
      | 
    
|    3 | chenzhu       |              2 | 
    
      2007-05-23 
      | 
    
|    4 | chengguoliang |              2 | 
    
      2007-05-22 
      | 
    
|    5 | zhangjianpeng |              1 | 
    
      2007-05-23 
      | 
    
|    9 | jiawei        |             17 | 
    
      2007-05-23 
      | 
    
|    6 | jiexiaoming   |             23 | 
    
      2007-05-22 
      | 
    
|    7 | yuchi         |             19 | 
    
      2007-05-21 
      | 
    
+------+---------------+----------------+-------------+ 
    
8 rows in set (0.00 sec)

我们看到id号码不是按照从小到大的顺序排序的我们可以按照id进行排序

mysql> select *from reader order by id; 
    
+------+---------------+----------------+-------------+ 
    
| id   | name          | borrow_book_id | borrow_date | 
    
+------+---------------+----------------+-------------+ 
    
|    1 | liushangkun   |              4 | 
    
      2007-05-25 
      | 
    
|    2 | zhaowei       |              3 | 
    
      2007-05-23 
      | 
    
|    3 | chenzhu       |              2 | 
    
      2007-05-23 
      | 
    
|    4 | chengguoliang |              2 | 
    
      2007-05-22 
      | 
    
|    5 | zhangjianpeng |              1 | 
    
      2007-05-23 
      | 
    
|    6 | jiexiaoming   |             23 | 
    
      2007-05-22 
      | 
    
|    7 | yuchi         |             19 | 
    
      2007-05-21 
      | 
    
|    9 | jiawei        |             17 | 
    
      2007-05-23 
      | 
    
+------+---------------+----------------+-------------+ 
    
8 rows in set (0.01 sec)

我想通过上面的学习大家已经基本掌握了建立表的一些基本方法

下面我们根据刚才的内容再如法炮制以下几个表:

BOOK表:

mysql> select *from book; 
    
+----+--------------------------------+-----------+------+ 
    
| id | book_name                      | author_id | page | 
    
+----+--------------------------------+-----------+------+ 
    
|  1 | How to became an attractive man|         1 |  345 | 
    
|  2 | international finace           |         6 |  453 | 
    
|  3 | I want to be a wisdom man      |         4 |  321 | 
    
|  4 | Advanced Programming in UNIX   |         5 |  953 | 
    
|  5 | How to became rich             |         3 |  421 | 
    
| 17 | Thinking in C++                |         2 |  521 | 
    
| 19 | Thinking in Java               |         2 |  721 | 
    
+----+--------------------------------+-----------+------+ 
    
author表: 
     
mysql> select *from author; 
    
+----+-------------+-------------+ 
    
| id | author_name | nationality | 
    
+----+-------------+-------------+ 
    
|  1 | Jack Chen   | CN          | 
    
|  2 | Burce Eckel | US          | 
    
|  3 | Pat         | 
     
     
       UK 
      
              | 
    
|  5 | Stevens     | US          | 
    
|  4 | Hal         | 
     
     
       UK 
      
              | 
    
|  6 | Fleagle     | US          | 
    
+----+-------------+-------------+

                                (四)数据更新

标准sql修改语句如下:

update table_name 
    
set column1=value1, column2=value2,....,columnN=valueN 
    
[where clause];

练习4.1

更新id为6,jiexiaoming的借书号和借书日期

mysql> update reader set borrow_book_id=5,borrow_date=' 2007-5-26 'where id=6;

可以察看结果:

mysql> select *from reader where id=6; 
    
+------+-------------+----------------+-------------+ 
    
| id   | name        | borrow_book_id | borrow_date | 
    
+------+-------------+----------------+-------------+ 
    
|    6 | jiexiaoming |              5 | 
    
      2007-05-26 
      | 
    
+------+-------------+----------------+-------------+

id号为6的元组borrow_book_id和borrow_date两个字段被改写了。

(五)改变表的结构

练习5.1

我们如何在表中增加字段一个age字段

mysql> alter table reader add column age int; 
    
mysql> show columns from reader; 
    
+----------------+----------+------+-----+---------+-------+ 
    
| Field          | Type     | Null | Key | Default | Extra | 
    
+----------------+----------+------+-----+---------+-------+ 
    
| id             | int(11)  | YES  |     | NULL    |       | 
    
| name           | char(16) | YES  |     | NULL    |       | 
    
| borrow_book_id | int(11)  | YES  |     | NULL    |       | 
    
| borrow_date    | date     | YES  |     | NULL    |       | 
    
| age            | int(11)  | YES  |     | NULL    |       | 
    
+----------------+----------+------+-----+---------+-------+

增加了age字段。

练习5.2

填充age字段的内容由于表中程国梁,张建鹏,贾伟不是21岁其它同学都是21。

mysql> update reader set age=21 where id !=4 && id !=5 && id !=9; 
    
mysql> update reader set age=23 where id=4 || id=5 || id=9; 
    
mysql> select *from reader; 
    
+------+---------------+----------------+-------------+------+ 
    
| id   | name          | borrow_book_id | borrow_date | age  | 
    
+------+---------------+----------------+-------------+------+ 
    
|    1 | liushangkun   |              4 | 
    
      2007-05-25 
      |   21 | 
    
|    2 | zhaowei       |              3 | 
    
      2007-05-23 
      |   21 | 
    
|    3 | chenzhu       |              2 | 
    
      2007-05-23 
      |   21 | 
    
|    4 | chengguoliang |              2 | 
    
      2007-05-22 
      |   23 | 
    
|    5 | zhangjianpeng |              1 | 
    
      2007-05-23 
      |   23 | 
    
|    9 | jiawei        |             17 | 
    
      2007-05-23 
      |   23 | 
    
|    6 | jiexiaoming   |              5 | 
    
      2007-05-26 
      |   21 | 
    
|    7 | yuchi         |             19 | 
    
      2007-05-21 
      |   21 | 
    
+------+---------------+----------------+-------------+------+

(六).统计函数

SQL有一些统计函数,它们对于生成数据表格很有帮助。下面介绍几个常用的统计函数:

sum (exepression) 计算表达式的和

avg (exepression) 计算表达式的平均值

count (exepression) 对表达式进行简单的计数

count (*) 统计记录数

max (exepression) 求最大值

min (exepression) 求最小值

其中exepression为任何有效的SQL表达式,它可以是一个或多个记录,也可以是别的SQL函数的组合。

练习6.1

统计每个作者出书的数量可以用如下的方法:

mysql> select author_id,  count(book_name) 
    
        from book group by author_id; 
    
+-----------+------------------+ 
    
| author_id | count(book_name) | 
    
+-----------+------------------+ 
    
|         1 |                1 | 
    
|         2 |                2 |  结果显示只有author_id为2的作者 出了两本书其它 
    
|         3 |                1 |          作者都只出了一本书。 
     
|         4 |                1 | 
    
|         5 |                1 | 
    
|         6 |                1 | 
    
+-----------+------------------+

(七)连接查询

最为激动人心的时刻即将到来,我们在前面已经做好了充足的准备,当我们使用连接操作我们就可以实现一个简单的图书管理系统后台数据库的雏形了。

那我们就开始了,我们实现三张表的无敌大连接:

mysql> select reader.id, book.book_name,  reader.name,

              reader.borrow_date , book.page, author.author_nationality

       from author, book, reader

       where author.id=book.author_id  &&  reader.borrow_book_id=book.id;



mysql实训反思及问题 mysql实训体会_date

 

既然好不容易才做出的几个表,我们还要对数据库进行一些相关的实验,让我们尽情的“蹂躏”这些表吧!

练习7.1

我们的每个reader都有年龄这个字段。我们想看看,比较“成熟”的男人都喜欢看些什么书。

我们可以这样操作:

mysql> select book.book_name,reader.name 
    
       from reader,book 
    
       where reader.borrow_book_id  = book.id and reader.age>21; 
     
+--------------------------------+---------------+ 
    
| book_name                      | name          | 
    
+--------------------------------+---------------+ 
    
| international finace           | chengguoliang | 
    
| How to became an attractive man| zhangjianpeng | 
    
| Thinking in C++                | jiawei        | 
    
+--------------------------------+---------------+

看来“成熟”的男人比较如何喜爱提升个人魅力、金融还有C++方面的书籍。

练习7.2

那我还想看看图书馆里有那些是Burce Eckel老师出的书,那也很容易:

mysql> select book.book_name 
    
       from author, book 
    
       where author.author_name="Burce Eckel" and book.author_id=author.id; 
    
+------------------+ 
    
| book_name        | 
    
+------------------+ 
    
| Thinking in C++  | 
    
| Thinking in Java | 
    
+------------------+

其实大家还可以进行各种各样的查询操作,回忆我们在去图书馆搜索图书的时候有按索书号、作者、书名、主题词等进行搜索实际上就是这个道理。

(八)模式匹配

那我们就练习一个用主题词进行搜索。

练习8.1

我们想查找一个本How开头的书并且显示书的作者和借阅此书的读者。

mysql> select reader.name,book.book_name,author.author_name 
    
        from author, book, reader 
    
        where book.book_name like 'How%' 
    
        and reader.borrow_book_id=book.id 
    
        and book.author_id=author.id; 
    
 
+---------------+---------------------------------+-------------+ 
    
| name          | book_name                       | author_name | 
    
+---------------+---------------------------------+-------------+ 
    
| zhangjianpeng | How to became an attractive man | Jack Chen   | 
    
| jiexiaoming   | How to became rich              | Pat         |