MySQL官方参考文档学习笔记——第3章_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2896 | 回复: 0   主题: MySQL官方参考文档学习笔记——第3章        下一篇 
John
注册用户
等级:大元帅
经验:90444
发帖:136
精华:2
注册:2011-7-21
状态:离线
发送短消息息给John 加好友    发送短消息息给John 发消息
发表于: IP:您无权察看 2014-11-19 10:48:09 | [全部帖] [楼主帖] 楼主

写在前面:读书就要做笔记,这篇文章是读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 几条基本特征 

        举例:获得服务器的版本号和当前日期;

clip_image001[10]


        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)<RIGHT(birth,5))
AS age
FROM pet ORDER BY age;


                3.5.6.3 已知用户是否已经死亡、出生日期、死亡日期,计算已经死亡的动物的死亡年龄: 

mysql> SELECT name, birth, death,
-> (YEAR(death)-YEAR(birth)) - (RIGHT(death,5)<RIGHT(birth,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’。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论