MySQL 练习手稿

来源:互联网 发布:js 鼠标悬浮提示文字 编辑:程序博客网 时间:2024/06/10 01:35

MySQL 练习手稿

 

      MySQL 介绍


      MySQL AB是由MySQL创始人和主要开发人创办的公司。MySQL AB最初是由David Axmark、Allan Larsson和Michael“Monty”Widenius在瑞典创办的。

 

      公司名中的“AB”是瑞典语“aktiebolag”或“股份公司”的首字母缩写。可将其翻译为“MySQL有限公司”。事实上,MySQL有限公司和MySQLGmbH均是MySQL AB子公司的名称。它们分别位于美国和德国。

 

      MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。MySQL AB是由多名MySQL开发人创办的一家商业公司。它是一家第二代开放源码公司,结合了开放源码价值取向、方法和成功的商业模型。

 

      MySQL的主要特性


     1、使用C和C++编写

     2、能够工作在众多不同的平台上

     3、使用GNU Automake、Autoconf和Libtool进行移植

     4、提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl的API

     5、提供了事务性和非事务性存储引擎

 

     创建并使用数据库

 

     知道怎样输入命令,便可以访问数据库了。

 

 

    1、创建数据库
    2、创建数据库表
    3、装载数据到数据库表
    4、以各种方法从表中检索数据
    5、使用多个表

 

    show variables like 'character_set_client';     -- 客户端字符集

    show variables like 'character_set_database';   -- 数据库字符集

    show variables like 'character_set_server';    -- 服务器字符集

 

    show variables like '%character_set_%';   -- 查看当前的状态

 

    SET character_set_client = utf8;
    SET character_set_results = utf8;
    SET character_set_connection = utf8;

 

    mysqldump -uA9d1m6i4n -pA9d1m6i4n --default-character-set=latin1 test > F:/test_table.sql

 

使用SHOW语句找出服务器上当前存在什么数据库:

mysql> SHOW DATABASES;

 

+-------------+
| Database |
+-------------+
| mysql       |
| test          |
| tmp          |
+-------------+

 

可能你的机器上的数据库列表是不同的,但是很可能有mysql和test数据库。

mysql是必需的,因为它描述用户访问权限,test数据库经常作为用户试身手的工作区。

 

如果test数据库存在,尝试访问它:

mysql> USE test
注意,USE,类似QUIT,不需要一个分号。(如果你喜欢,你可以用一个分号终止这样的语句;这无碍)

你需要自己创建数据库:
mysql> CREATE DATABASE pet;

创建数据库并不表示选定并使用它,你必须明确地操作。为了使pet成为当前的数据库,使用这个命令:

mysql> USE pet

 

创建数据库是很容易的部分,但是在这时它是空的,正如SHOW TABLES将告诉你的:

mysql> SHOW TABLES;

较难的部分是决定你的数据库结构应该是什么:你需要什么数据库表,各数据库表中有什么样的列。

 

使用一个CREATE TABLE语句指定你的数据库表的布局:

 

CREATE TABLE pet_table
(
    name VARCHAR(20),
    owner VARCHAR(20),
    species VARCHAR(20),
    sex CHAR(1),
    birth DATE,
    death DATE
);

 

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

mysql> DESCRIBE pet_table;
+------------+---------------+------+------+-----------+--------+
| 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     |           |
+-----------+----------------+-------+------+----------+--------+
你可以随时使用DESCRIBE,例如,如果你忘记表中的列的名称或类型时。

 

如果想要一次增加一个新记录,可以使用INSERT语句。

mysql> INSERT INTO pet_table VALUES ('Puffball','Harold ','cat','f','1993-02-04',NULL);

 

注意,这里字符串和日期值均为引号扩起来的字符串。另外,可以直接用INSERT语句插入NULL代表不存在的值。

 

 

SELECT语句用来从数据表中检索信息。语句的一般格式是:

SELECT what_to_select
FROM which_table
WHERE conditions_to_satisfy;

what_to_select指出你想要看到的内容,可以是列的一个表,或*表示“所有的列”。which_table指出你想要从其检索数据的表。WHERE子句是可选项,如果选择该项,conditions_to_satisfy指定行必须满足的检索条件。

 

SELECT最简单的形式是从一个表中检索所有记录:
mysql> SELECT * FROM pet_table;

 

+-----------+--------+-----------+------+----------------+------------+
| name     | owner | species  | sex  | birth            | death      |
+-----------+--------+-----------+------+----------------+------------+
| Puffball  | Harold | cat         | f      | 1993-02-04  |     NULL   |
+-----------+--------+-----------+------+----------------+------------+

 

用一个UPDATE语句修正前面新增的错误记录:

mysql> UPDATE pet_table SET death = '1998-10-24' WHERE name = 'Puffball';


再检索一下刚才修正的记录:

mysql> SELECT * FROM pet_table;

 

+-----------+----------+----------+------+--------------------+-------------- -+
| name      | owner  | species | sex  | birth                 | death           |
+-----------+----------+----------+------+--------------------+----------------+
| Puffball   | Harold  | cat        | f       | 1993-02-04      | 1998-10-24 |
+-----------+----------+----------+------+--------------------+--------------- +

 


你可以在任何列上指定条件,不只仅仅是name。

 

例如,如果你想要知道哪个动物在1998以后出生的,测试birth列:

mysql> SELECT * FROM pet_table 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 |
+----------+----------+-----------+------+----------------+-------+

也可以组合条件,例如,找出雌性的狗:

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

 

+--------+----------+----------+------+----------------+---------+
| name  | owner  | species | sex  | birth             | death  |
+--------+----------+----------+------+----------------+---------+
| Buffy   | Harold  | dog       | f      | 1989-05-13  | NULL   |
+---------+---------+----------+------+----------------+---------+

 

上面的查询使用AND逻辑操作符,也有一个OR操作符:

mysql> SELECT * FROM pet_table 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 |
+-----------+---------+-----------+-------+----------------+--------+

ANDOR可以混用,但ANDOR具有更高的优先级

如果你使用两个操作符,使用圆括号指明如何对条件进行分组是一个好主意:

mysql> SELECT * FROM pet_table WHERE (species = 'cat' AND sex = 'm')   

        -> OR (species = 'dog' AND sex = 'f');


+------------+---------+----------+-------+----------------+---------+
| 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   |
+------------+--------+-----------+-------+----------------+---------+

 

可以使用一个WHERE子句结合行选择与列选择。

 

例如,要想查询狗和猫的出生日期,使用这个查询:

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


+----------+----------+---------------+
| name    | species | birth            |
+----------+----------+---------------+
| Fluffy    | cat        | 1993-02-04 |
| Claws   | cat        | 1994-03-17 |
| Buffy     | dog      | 1989-05-13 |
| Fang     | dog      | 1990-08-27 |
| Bowser | dog      | 1989-08-31 |
+----------+----------+---------------+

 

 

你可能已经注意到前面的例子中结果行没有以特定的顺序显示。

然而,当行按某种方式排序时,检查查询输出通常更容易。为了排序结果,使用ORDER BY子句。


这里是动物生日,按日期排序:

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

 

+-----------+----------------+
| name     | birth             |
+-----------+----------------+
| Buffy      | 1989-05-13  |
| Slim        | 1996-04-29 |
| Whistler | 1997-12-09 |
| Chirpy    | 1998-09-11 |
| Puffball   | 1999-03-30 |
+-----------+----------------+

 

在字符类型列上,与所有其他比较操作类似,分类功能正常情况下是以区分大小写的方式执行的。

 

这意味着,对于等同但大小写不同的列,并未定义其顺序。

 

对于某一列,可以使用BINARY强制执行区分大小写的分类功能,如:ORDER BY BINARY col_name.

默认排序是升序,最小的值在第一。要想以降序排序,在你正在排序的列名上增加DESC(降序 )关键字:

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


+------------+-----------------+
| name       | birth              |
+------------+-----------------+
| Puffball    | 1999-03-30   |
| Chirpy     | 1998-09-11    |
| Whistler  | 1997-12-09    |
| Slim         | 1996-04-29    |
| Claws      | 1994-03-17    |
| Fluffy       | 1993-02-04    |
| Fang       | 1990-08-27    |
| Bowser   | 1989-08-31    |
| Buffy       | 1989-05-13    |
+------------+-----------------+


可以对多个列进行排序,并且可以按不同的方向对不同的列进行排序。

 

例如,按升序对动物的种类进行排序,然后按降序根据生日对各动物种类进行排序(最年轻的动物在最前面),使用下列查询:

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


+-----------+------------+----------------+
| name      | species   | birth            |
+-----------+------------+----------------+
| Chirpy    | bird         | 1998-09-11 |
| Whistler | bird         | 1997-12-09 |
| Claws     | cat          | 1994-03-17 |
| Fluffy      | cat          | 1993-02-04 |
| Fang       | dog        | 1990-08-27 |
| Bowser   | dog        | 1989-08-31 |
| Buffy       | dog        | 1989-05-13 |
| Puffball   | hamster | 1999-03-30 |
| Slim        | snake     | 1996-04-29 |
+-----------+------------+---------------+


注意DESC关键字仅适用于在它前面的列名(birth);不影响species列的排序顺序。

 

MySQL提供了几个函数,可以用来计算日期,例如,计算年龄或提取日期部分。

要想确定每个宠物有多大,可以计算当前日期的年和出生日期之间的差。

 

如果当前日期的日历年比出生日期早,则减去一年。以下查询显示了每个宠物的出生日期、当前日期和年龄数值的年数字。

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


+-----------+----------------+---------------+------+
| name      | birth            | CURDATE()  | age  |
+-----------+----------------+---------------+------+
| Fluffy      | 1993-02-04 | 2003-08-19 |   10 |
| Claws     | 1994-03-17 | 2003-08-19 |    9  |
| Buffy       | 1989-05-13 | 2003-08-19 |   14 |
| Fang       | 1990-08-27 | 2003-08-19 |   12 |
| Bowser   | 1989-08-31 | 2003-08-19 |   13 |
| Chirpy    | 1998-09-11 | 2003-08-19  |    4  |
| Whistler | 1997-12-09 | 2003-08-19  |    5  |
| Slim        | 1996-04-29 | 2003-08-19  |    7  |
| Puffball   | 1999-03-30 | 2003-08-19  |    4  |
+-----------+----------------+----------------+------+


此处,YEAR()提取日期的年部分,RIGHT()提取日期的MM-DD (日历年)部分的最右面5个字符。

 

比较MM-DD值的表达式部分的值一般为1或0,如果CURDATE()的年比birth的年早,则年份应减去1。

 

整个表达式有些难懂,使用alias (age)来使输出的列标记更有意义。

 

尽管查询可行,如果以某个顺序排列行,则能更容易地浏览结果。

 

添加ORDER BY name子句按照名字对输出进行排序则能够实现。

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


+-----------+----------------+---------------+-------+
| name      | birth            | CURDATE()  | age   |
+-----------+----------------+----------------+------+
| Bowser   | 1989-08-31 | 2003-08-19 |   13  |
| Buffy       | 1989-05-13 | 2003-08-19 |   14  |
| Chirpy    | 1998-09-11  | 2003-08-19 |    4   |
| Claws     | 1994-03-17 | 2003-08-19 |    9   |
| Fang       | 1990-08-27 | 2003-08-19 |   12  |
| Fluffy      | 1993-02-04 | 2003-08-19 |   10  |
| Puffball   | 1999-03-30 | 2003-08-19 |    4   |
| Slim        | 1996-04-29 | 2003-08-19 |    7   |
| Whistler | 1997-12-09 | 2003-08-19 |    5   |
+-----------+----------------+---------------+-------+

 

 

 


 

原创粉丝点击