MySQL官方参考文档学习笔记——第3章

 

Technorati 标签: MySql 官方 参考文档 Reference Manual 学习笔记 第3章

 

 

写在前面:读书就要做笔记,这篇文章是读MySQL官方参考手册后做的笔记,其中加入了自己的一些总结和汇总,为了自己以后需快速复习时使用。

官方参考手册(Reference)地址:
中文:http://dev.mysql.com/doc/refman/5.1/zh/tutorial.html
英文:http://dev.mysql.com/doc/refman/5.1/en/tutorial.html

目录
MySQL官方文档第三章
1 连接和断开
    1.1 连接
    1.2 断开
2 命令基本原则
    2.1 几条基本特征
    2.2 提示符
3 创建并使用数据库
    3.1 创建并选择数据库
    3.2 创建表
    3.3 将数据装入表中
    3.4 修改(更新)数据
    3.5 从表中检索数据
4 获得数据库和表的信息
5 批处理模式下
    5.1 在MySQL提示符的交互式环境中
    5.2 批处理模式下(即在shell命令行)

1 连接和断开
    1.1 连接
        1.1.1 推荐方法(不直接输入密码) 
            shell> mysql -h host -u user -p
            Enter password: ********
            说明:host为MySQL服务器主机名;user为MySQL用户账户名;
        1.1.2 直接输入密码
            shell> mysql -h host -u user –p****
            说明:****表示账户对应的密码;
            注意:“-p”后面与密码之间不能有空格。
        1.1.3 如果是使用本机的MySQL数据库,因为默认是localhost,不需要”-h”参数
            shell> mysql -u user -p
        1.1.4 指定要使用数据库
            shell> mysql -h host -u user -p 数据库名称
            Enter password: ********
        1.1.5 如果安装MySQL时,允许匿名登陆,可以在命令行直接用mysql登陆
            shell> mysql
    1.2 断开
        1.2.1 在mysql>提示下输入 quit 或者 /q 退出;
        1.2.2 在Windows下,可以使用exit或者control-C键;
        1.2.3 在Unix下,可以使用control-D键;

2 命令基本原则 

 

    2.1 几条基本特征
        举例:获得服务器的版本号和当前日期;
              MySQL官方参考文档学习笔记——第3章_第1张图片
        2.1.1 每行首部的“mysql>”,表示它准备好接受其它命令。
        2.1.2 sql语句要以分号(;)结尾。有个别例外情况,如断开数据库的quit指令。
        2.1.3 可以在一行输入多行命令,以分号分割; 也可以在多行输入一条命令,这是可以使用(/c)来取消当前命令;
        2.1.4 和其他数据库一样,MySQL用表格(行和列)方式显示查询输出。第一行包含列的标签,随后的行是查询结果。通常,列标签是你取自数据库表的列的名字。
        2.1.5 在结果输出以后,显示返回了多少行,以及查询花了多长时间,它给你提供服务器性能的一个大致概念。注意:这里的时间不是精确时间。
        2.1.6 对于关键字大小写不敏感,以下几条语句等价。
                mysql> SELECT VERSION(), CURRENT_DATE;
                mysql> select version(), current_date;
                mysql> SeLeCt vErSiOn(), current_DATE;
            但是对于标识符,如数据库名称、表名称和列名称,在Unix系统中是大小写敏感的。在Windows系统中仍然是不敏感的。
        2.1.7 可以在一行上输入多条语句,只需要以一个分号间隔开各语句;
                mysql> SELECT VERSION(); SELECT NOW();
        2.1.8 一条命令也可以在多个行中,它收集输入行但直到看见分号才执行。这时,可以使用(/c)来取消当前命令;。例如:
                mysql> SELECT
                        -> USER()
                        -> ,
                        -> CURRENT_DATE;
                mysql> SELECT
                        -> USER()
                        -> /c
                mysql>

    2.2 提示符
        2.2.1 mysql> 准备好接受新命令。
        2.2.2 -> 等待多行命令的下一行。
        2.2.3 '> 等待下一行,等待以单引号(“'”)开始的字符串的结束。
        2.2.4 "> 等待下一行,等待以双引号(“"”)开始的字符串的结束。
        2.2.5 `> 等待下一行,等待以反斜点(‘`’)开始的识别符的结束。
        2.2.6 /*> 等待下一行,等待以/*开始的注释的结束。
                用途:当输入错误后,可以根据提示符的变化来判断。
            注意:但是对于后四种情况,在取消命令的时候,要先将引号等等待符号结束以后才可以输入(/c)取消命令。例如:
                        mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
                                '> '/c
                        mysql>
                    这里如果直接输入(/c),会被认为是引号字符串的一部分,不会跳出。通过输入观察提示符可以看出现在是需要单引号('),必须要先结束引号。

3 创建并使用数据库
    3.1 创建并选择数据库
        3.1.1 显示存在的数据库:show databases;
        3.1.2 选择一个存在的数据库:use ****; 这里“****”代表数据库名称。
            说明:①可以使用分号结束,也可以不适用;②必须在一行内,即use和数据库名称必须在一行内。
        3.1.3 创建数据库:CREATE DATABASE 数据库名称;
            注意:create database 是大小写不敏感的。如果在Windows系统中,数据库名称也是大小写不敏感的,但是在Unix系统中,数据库名称是大小写敏感的。
        3.1.4 判断当前使用的数据库:select database();

    3.2 创建表
        3.2.1 显示已选择的数据库中的表:SHOW TABLES; 必须先选择(use)数据库,然后才能正确使用此命令。
        3.2.2 创建表:使用CREATE TABLE 表名(列名 类型,限制等)。例如:
                mysql> create table pet(
                -> name varchar(20),
                -> owner varchar(20),
                -> species varchar(20),
                -> sex char(1),
                -> birth DATE,
                -> death DATE);
        3.2.3 显示表的详细信息: DESCRIBE 表名;

    3.3 将数据装入表中:
        有两种方式,使用load data 和使用insert语句。 
        3.3.1 使用load data方式:
            ①每行包含一个记录,②用定位符(tab)把值分开,并且以CREATE TABLE语句中列出的列次序给出。③在文本文件中使用/N(反斜线,字母N),表示NULL。
            例如:
                    LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
                说明:默认行结束标记是定位符和换行符。也可以自行指定在LOAD DATA语句中指出列值的分隔符和行尾标记。
                注意:如果是使用的Windows系统中的编辑器创建的文本(windows编辑器使用/r/n作为行结束符),需要在命令中指定行结束符,即指定为”/r/n”。同理,在运行OS X的Apple机上,应使用行结束符‘/r’。例如:
                                mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
                                        -> LINES TERMINATED BY '/r/n';
        3.3.2 使用insert语句:
            该方法最简单的形式是:提供每一列的值,其顺序与CREATE TABLE语句中列的顺序相同。
                    mysql> INSERT INTO pet
                            -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
            注意:这里和load data方式不同的是:不再使用(/N),而是使用NULL。

    3.4 修改(更新)数据
            使用UPDATE语句。 
                       mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';
            说明:如果是通过load data导入的数据,在导入后没有其他数据变化,可以通过先删除表,然后在导入的文本中修改,最后再重新导入的方法。
                        mysql> DELETE FROM pet;
                        mysql> LOAD DATA LOCAL INFILE 'pet.txt' INTO TABLE pet;
            注意:这里“delete from 表名称”是清空表中的数据;删除一个表的语句是 drop table 表名称。

    3.5 从表中检索数据
        3.5.1 从表中检索信息,使用select语句,一般格式为:
                SELECT what_to_select
                FROM which_table
                WHERE conditions_to_satisfy;
        3.5.2 选择所有数据:SELECT * FROM pet;
        3.5.3 查找特定的行:在where语句中添加限制条件。
            注意:可以同时使用and和or等逻辑操作符,但是and的优先级要高。
        3.5.4 查找特定的列:在select后面跟上列名,多个列名时用逗号分隔;
            注意:使用distinct关键字来检索每个唯一的输出记录。
        3.5.5 排序查询结果:使用order by子句。
                mysql> SELECT name, birth FROM pet ORDER BY birth;
            说明:①默认是升序的。若需要降序排序,在列名后加desc,且desc仅仅影响紧跟的那一列。 
            下面的查询表示:按升序对动物的种类进行排序,然后按降序根据生日对各个动物种类进行排序(最年轻的动物在最前面)。这里,DESC关键字仅适用于在它前面的列名(birth);不影响species列的排序顺序。
                        mysql> SELECT name, species, birth FROM pet
                                -> ORDER BY species, birth DESC;
                    ②排序时默认是不区分大小写的(case-insensitive),如果希望区分大小写,使用关键字BINARY。(注意:在官方的中文文档中,翻译为“以区分大小写的方式执行”,通过查看英文文档发现,中文文档翻译错误,应该为不区分大小写)。 
        3.5.6 简单日期计算函数
                3.5.6.1 几个日期部分的提取函数,YEAR( )、MONTH( )和DAYOFMONTH( )。参数是date或datetime类型。
                3.5.6.2 已知出生日期,来计算年龄age:
                        SELECT name, birth, CURDATE(),
                        (YEAR(CURDATE())-YEAR(birth)) - (RIGHT(CURDATE(),5)                        AS age
                        FROM pet ORDER BY age;
                3.5.6.3 已知用户是否已经死亡、出生日期、死亡日期,计算已经死亡的动物的死亡年龄:
                        mysql> SELECT name, birth, death,
                        -> (YEAR(death)-YEAR(birth)) - (RIGHT(death,5)                        -> AS age
                        -> FROM pet
                        -> WHERE death IS NOT NULL
                        -> ORDER BY age;
                3.5.6.4 查询在用户中,下个月过生日的用户:
                    ①第一种方法:使用DATE_ADD方法;
                            mysql> SELECT name, birth FROM pet
                                    -> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));
                    ②第二种方法:使用mod函数;
                            mysql> SELECT name, birth FROM pet
                            -> WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1; 
        3.5.7 NULL值计算
               3.5.7.1 与NULL比较时,只能使用is null和is not null操作符;不能使用=、<>、<、>、!=等符号。
                3.5.7.2 在order by时,两个null值被认为是相同的。升序时null排在前面,降序时排在后面。
                        ①为保证null一直都排在最后,使用isnull函数:
                                SELECT * FROM my_table ORDER BY ISNULL(field), field [ ASC | DESC ]
                        ②保证结果集中没有空值,在where子句中添加判断:
                                select distinct monthname(sale_date)
                                from parts_acc_sales
                                where sale_date is not null
                3.5.7.3 在not null的列内插入0或者空字符串(””),会被认为是非空。
        3.5.8 模式匹配
                3.5.8.1 标准的SQL模式匹配:
                        说明:①不区分大小写;②不能使用=或者!=,而是要使用like或者not like。
                        3.5.8.1.1 ‘_’ 匹配单个字符;
                        3.5.8.1.2 ‘%’ 匹配任意多字符,包括零个字符;
                3.5.8.2 扩展正则表达式(这里主要是正则表达式的知识,下面是一些常用的简单匹配)
                    说明:使用regexp和not regexp操作符(或者rlike和not rlike)。
                        3.5.8.2.1 ‘.’ 匹配任何单个的字符;
                        3.5.8.2.2 ‘[...]’ 匹配在方括号内的任何一个字符。可以使用[a-z]范围匹配。
                        3.5.8.2.3 ‘*’ 匹配零个或多个在它前面的字符。例如:
                                “x*”匹配任何数量的“x”字符
                                “[0-9]*”匹配任何数量的数字
                                “.*”匹配任何数量的任何字符
                        3.5.8.2.4 ‘^’ 匹配开头
                        3.5.8.2.5 ‘$’ 匹配结尾
                        3.5.8.2.6 ‘{n}’ 重复n次 
                    举例: 
                    找出以“b”或“B”开头的名字:
                            mysql> SELECT * FROM pet WHERE name REGEXP '^b';
                    找出以小写字母“b”开头的名字:
                            mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';
                    找出以“fy”结尾的名字:
                            mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';
                    找出包含一个“w”的名字:
                            mysql> SELECT * FROM pet WHERE name REGEXP 'w';
                    找出包含正好5个字符的名字(^和$之间有5个“.”):
                            mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';
                    可以使用“{n}”“重复n次”操作符重写前面的查询:
                            mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$';
                    注意:①使用regexp模式与被测试值的任何地方匹配,则模式就算匹配成功。而在标准匹配(使用like)中,整个匹配表达式全部匹配才算匹配成功。 
                    ②为了使REGEXP在比较时区分大小写,使用BINARY关键字(原理:使字符串变为二进制字符串)。
            关于在MySQL中使用正则表达式的详细信息,可以查看官方文档(版本为MySQL5.1):http://dev.mysql.com/doc/refman/5.1/zh/regexp.html(中文),http://dev.mysql.com/doc/refman/5.1/en/regexp.html(英文)。
        3.5.9 计算行数
            使用count函数,在select子句中。有时使用group by子句来区分各个小组。
            注意:如果MySQL处于“ONLY_FULL_GROUP_BY”模式下,在select列表中出现的列名必须在group by子句中出现。
                    (Do not permit queries for which the SELECT list refers to nonaggregated columns that are not named in the GROUP BY clause.)
                                mysql> SET sql_mode = 'ONLY_FULL_GROUP_BY';
                                Query OK, 0 rows affected (0.00 sec)
                                mysql> SELECT owner, COUNT(*) FROM pet;
                                ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT()...)
                                with no GROUP columns is illegal if there is no GROUP BY clause
                    如果不是在“ONLY_FULL_GROUP_BY”模式下,执行查询时将所有行当做是一个组,但是对于select列表中出现的列,返回结果时随机选择值。(the query is processed by treating all rows as a single group, but the value selected for each named column is indeterminate. The server is free to select the value from any row)。例如:
                                mysql> SET sql_mode = '';
                                Query OK, 0 rows affected (0.00 sec)
                                mysql> SELECT owner, COUNT(*) FROM pet;
                                +--------+----------+
                                | owner | COUNT(*) |
                                +--------+----------+
                                | Harold | 8 |
                                +--------+----------+
                                1 row in set (0.00 sec)
        3.5.10 使用两个或多个表
                在from语句中添加多个表名,在where语句中添加判断条件(一般通过查询的表共有的列)。
                注意:如果列名出现重复,那么再引用列的时候要使用“table.column”的形式,中间使用符号“.”。也可以将表自身与自身连接,这是要为表声明别名。例如:在宠物中查找能够繁殖的配偶(类别相同,且性别不同)。
                        mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
                                -> FROM pet AS p1, pet AS p2
                                -> WHERE p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm';

4 获得数据库和表的信息
        下面这4种方法在上面都用到过,这里总结一下。
    4.1 show databases; 列出服务器管理的数据库。
    4.2 select database(); 进入一个数据库以后,打出当前使用的数据库。
    4.3 show tables; 列出当前数据库的所有表。
    4.4 describe 表名; 列出当前表的所有信息
        其他的获得数据库和表的方法
    4.5 在交互式模式下,输入status或者 /s,获得MySQL的状态。

5 批处理模式下
    直接运行MySQL的由两种:①在交互式命令行中运行;②在批处理模式下运行(也就是在shell命令行中)。
    5.1 在MySQL提示符的交互式环境中
        5.1.1 输入help获得帮助;
        5.1.2 运行脚本:使用“source命令”或者“/.”来运行脚本。
            例如:mysql> source filename;
                    mysql> /. filename
    5.2 批处理模式下(即在shell命令行):
        5.2.1 输入mysql –help获得帮助;
        5.2.2 一般格式:shell> mysql < batch-file;
        5.2.3 在Windows系统中,使用”-e”参数来处理包含特殊字符的文件。
                C:/> mysql -e "source batch-file"
        5.2.4 如果语句出现错误,仍想继续执行脚本,则应使用命令”-f”或者”--force”。
        5.2.5 当查询结果较多,需要分屏显示时:
                shell>mysql < batch-file | more
        5.2.6 将结果输出到文件:
                shell> mysql < batch-file > mysql.out
    注意:“交互式模式”和“批处理模式”两种方式的结果显示方式不相同:在交互式模式下,显示结果为表格模式;在批处理模式下为文本模式,如果在批处理模式下显示为表格模式,使用参数’-t’或者’--table’。

 

本文链接:http://blog.csdn.net/daheiantian/archive/2010/12/10/6070354.aspx

你可能感兴趣的:(SQL)