MySQL必知必会(上) | ||||||||||||||||
第一章 了解SQL 1.1 数据库基础 A. 数据库(Database):保存有组织的数据的容器(通常是一个文件或一组文件),是通过DBMS创建和操纵的容器。 B. 表(table):某种特定类型数据的结构化清单。表名具有唯一性。 C. 模式(schema):关于数据库和表的布局及特性的信息。 D. 列(column):表中的一个字段。所有表都是由一个或多个列组成的。 E. 分解数据:正确地数据分解为多个列极为重要。这样才有可能利用特定的列对数据进行排序和过滤。 F. 数据类型(datatype):所容许的数据的类型。每个表列都有相应的数据类型,它限制或容许该列存储的数据。 G. 行(row):表中的一个记录。 H. 主键(primary key):一列(或一组列),其值能够唯一区分表中的每个行。(应该总是定义主键,主键列不允许NULL值) I. 主键的好习惯:不更新主键列中的值;不重用主键列的值;不在主键列中使用可能会更改的值。 1.2 什么是SQL A. SQL(Structured Query Language):结构化查询语言。
第二章 MySQL简介 2.1什么是MySQL A.MySQL是一种DBMS,即它是一种数据库软件。种类:一类基于共享文件系统的DBMS,另一类基于客户机-服务器的DBMS。 B.客户机-服务器软件:服务器部分是负责所有数据访问和处理的一个软件,它运行在称为数据库服务器的计算机上。客户机是与用户打交道的软件(所有请求或更改来自运行客户机软件的计算机)。 C.服务器软件为MySQL DBMS,客户机可以是MySQL提供的工具,脚本语言,web开发语言,程序设计语言。 2.2 MySQL工具(已经集成到MySQL Workbench) A.MySQL命令实用程序 B.MySQL Administrator:用于简化MySQL服务器的管理。 C.MySQL Query Browser:用来编写和执行MySQL命令。
第三章 使用MySQL 3.1 连接 A.如何连接和登录到MySQL,为了连接到MySQL,需要一下信息:主机名(计算机名)——如果连接到本地MySQL服务器,为localhost;端口(使用默认端口3306之外的端口);一个合法的用户名;用户口令(如果需要的话)。 3.2 选择数据库 A.在执行任何数据库操作前,需要选择一个数据。为此,可使用USE关键字。 B.关键字(key word):作为MySQL语言组成部分的一个保留字。 C.(USE crashcource;)必须先使用USE打开数据库,才能读取其中的数据。 3.3 了解数据库和表 A.(SHOW DATABASES;)数据库、表、列、用户、权限等信息被存储在数据库和表中。 B.不过,内部的表一般不直接访问。(可用SHOW命令来显示这些信息,MySQL从内部表中提取这些信息。)SHOW TABLES; SHOW COLUMNS FROM customers; C.什么是自动变量?某些表列需要唯一值。在每个行添加到表中时,MySQL可以自动地为每个行分配下一个可用编号,不用在添加一行时手动分配唯一值。 D.DESCRIBE语句:MySQL支持用 DESCRIBE作为SHOW COLUMNS FROM的一种快捷方式。 第四章 检索数据 4.1 SELECT语句 A.SELECT语句的用途是从一个或多个表中检索信息。 4.2 检索单个列 A.SELECT prod_name FROM products; B.未排序数据:如果没有明确排序查询结果,则返回的数据的顺序没有特殊意义。 C.结束SQL语句:多条SQL语句必须以分号分隔。如果使用的是MySQL命令行,必须加上分号来结束SQL语句。 D.SQL语句和大小写:SQL语句不区分大小写,但是一般对所有SQL关键字使用大写,而对所有列和表名使用小写。 E.使用空格:在处理SQL语句时,其中所有空格都被忽略。 4.3 检索多个列 A.当心逗号:在选择多个列时,一定要在列名之间加上逗号,但最后一个列名后不加。SELECT prod_id, prod_name, prod_price FROM products; B.数据表示:SQL语句一般返回原始的,无格式的数据。数据的格式化是一个表示问题,而不是一个检索问题。因此,表示(对齐和显示上面的价格值,用货币符号和逗号表示其金额)一般在现实该数据的应用程序中规定。 4.4 检索所有列 A.SELECT * FROM products; B.使用通配符:一般,除非你确定需要表中的每个列,否则最好不要使用*通配符。检索不需要的列通常会降低检索和应用程序的性能。 C.检索未知列:由于不明确指定列名,所以能检索出名字未知的列。 4.5 检索不同行 A.SELECT vend_id FROM products; B.SELECT DISTINCT vend_id FROM products; 关键字DISTINCT指示MySQL只返回不同的值(唯一)。 C.DISTINCT关键字应用于所有列而不仅是前置它的列。 4.6 限制结果 A.SELECT prod_name FROM products LIMIT x,y; x和y为数字,第一个为开始位置,第二个数字为要检索的行数。 B.检索出来的第一行为行0而不是行1。 C.在行数不够时,MySQL将只返回它能返回的那么多行。 D.MySQL 5的LIMIT语法 4.7 使用完全限定的表名 A.使用完全限定的名字来引用列(同时使用表名和列字) B.SELECT products.prod_name FROM products; C.SELECT products.prod_name FROM crashcource.products; 第五章 排序检索数据 5.1 排序数据 A.关系数据库设计理论认为:如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。 B.子句(clause)SQL语句由子句构成,一个子句通常由一个关键字和所提供的数据组成。 C.SELECT prod_name FROM products ORDER BY prod_name; D.通常,ORDER BY子句使用的列将是为显示所选择的列。但是,用非检索的列排序数据是完全合法的。 5.2 按多个列排序 A.SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name; 5.3 指定排序方向 A.默认是升序排序,为了进行降序排序,必须指定DESC关键字。DESC关键字只应用到直接位于其后面的列名。如果想在多个列上进行降序排序,必须对每个列指定DESC。 B.SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC; C.区分大小写和排序顺序在字典排序顺序中,A被视为与a相同,这是MySQL的默认行为。不过有需要可以改变数据库的设置。 D.使用ORDER BY和LIMIT的组合,能够找出一个列中最高或最低的值。SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;
第六章 过滤数据 6.1 使用WHERE子句 A.只检索所需数据需要指定搜索条件(search criteria)或过滤条件(filter condition) B.SELECT prod_name, prod_price FROM products WHERE prod_price = 2.5; C.SQL过滤与应用过滤数据也可以在应用层过滤。但是,这种实现并不令人满意。 D.WHERE子句排在ORDER BY之前。 6.2 WHERE子句操作符 A.SELECT prod_name, prod_price FROM products WHERE prod_name = ‘fuses’;MySQL在执行匹配时默认不区分大小写。 B.何时使用引号:单引号用来限定字符串的。如果将值与串类型的列进行比较,则需要限定引号,用来跟数值列进行比较的值不用引号。 C.范围值检查:为了检查某个范围的值,可使用BETWEEN操作符。SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10; D.NULL 无值(no value)它与字段包含0,空字符串或仅仅包含空格不同。SELECT prod_name FROM products WHERE prod_price IS NULL; E.NULL与不匹配,在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行。 第七章 数据过滤 7.1 组合WHERE子句 A.为了进行更强的过滤控制,MySQL允许给出多个WHERE子句,以AND子句的方式或OR子句的方式使用。 B.操作符(operator)用来联结或改变WHERE子句中的子句的关键字,也称为逻辑操作符(logical operator) C.AND 用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。OR 它指示MySQL检索匹配任一条件的行。 D.在WHERE子句中使用圆括号任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。
7.2 IN操作符 A.IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配,IN取合法值的由逗号分隔清单,全都括在圆括号中。 B.IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。 SELECT prod_name,prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name; 7.3 NOT A.WHERE子句中用来否定后跟条件的关键字。(NOT IN) B.MySQL中的NOT MySQL支持使用NOT对IN,BETWEEN和EXISTS子句取反,这与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。SELECT prod_name, prod_price FROM products WHERE vend_id NOT IN (1002, 1003) ORDER BY prod_name; 第八章 用通配符进行过滤 8.1 LIKE操作符 A.利用通配符可创建比较特定数据的搜索模式。 B.通配符(wildcard)用来匹配值的一部分的特殊字符。 C.搜索模式(search pattern)由字面值,通配符或两者组合构成的搜索条件。 D.LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。 E.谓词:操作符在它作为谓词(predicate)时,不是操作符,从技术上说,LIKE是谓词而不是操作符。 F.百分号(%)通配符:在搜索串中,%表示任何字符出现任意次数。以下例子使用了搜索模式’jet%’: G.区分大小写:根据MySQL的配置方式,搜索可以是区分大小写的。 H.注意尾空格:尾空格可能会干扰通配符匹配。注意NULL:虽然似乎%通配符可以匹配任何东西,但是有一个例外,即NULL。 I.下划线(_)通配符:下划线只匹配单个字符而不是多个字符,不能多也不能少。 8.2 使用通配符的技巧 A.使用通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。 B、不要多度使用通配符。在确实需要使用通配符时,除非绝对有必要,否则不要把他们用在搜索模式的开始处。仔细注意通配符的位置。
第九章 用正则表达式进行搜索 9.1 正则表达式介绍 A.正则表达式是用来匹配文本的特殊的串(字符集合)。所有种类的程序设计语言,文本编辑器,操作系统等都支持正则表达式。 9.2 使用MySQL正则表达式 A.MySQL仅仅支持多数正则表达式实现的一个很小的子集。 B.LIKE匹配整个列值。如果被匹配的文本仅在列值中出现,LIKE将不会找到它,相应的行也不被返回(除非使用通配符)。而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。看下面的例子: C.匹配不区分大小写MySQL中的正则表达式匹配不区分大小写,为区分大小写可使用BINARY关键字,如WHERE prod_name REGEXP BINARY ‘JetPack .000’。 D.进行OR匹配:为搜索两个串之一,使用|,如下所示: E.匹配几个字符之一:匹配任何单一字符。如下所示: F.可使用-来定义一个范围。如[1-9],[a-b]。.在正则表达式中匹配任意一个字符。 G.为了匹配特殊字符,必须用为前导,例如-,.等。这种处理即转义(escaping)。 H. 为了更方便工作,可以使用预定义的字符集,称为字符类(character class)。 I. 正则表达式重复元字符: J.定位符: K.使REGEXP起类似LIKE的作用,它们的区别在于LIKE匹配整个串而REGEXP匹配子串。利用定位符,通过用^开始每个表达式,用$结束每个表达式。 L.简单的正则表达式测试:可以在不使用数据库表的情况下用SELECT来测试正则表达式。REGEXP检查总是返回0或1(匹配)。
第十章 创建计算字段 10.1计算字段 A.存储在数据库表中的数据一般不是应用程序所需要的格式。我们需要直接从数据库中检索出转换,计算或格式化过的数据;而不是检索出数据,然后再在客户机应用程序或报告程序中重新格式化。 B.字段(field):基本上和列(COLUMN)的意思相同,经常互换使用,不过数据库列一般成为列,而术语字段通常用在计算字段的连接上。 C.客户机与服务器的格式 10.2 拼接字段 A.拼接(concatenate)将值联结到一起构成单个值。(把两个列拼接起来) B.MySQL的不同之处:多数DBMS使用+或||来实现拼接,而MySQL使用Concat()函数来实现。 C.Trim函数:MySQL除了支持RTrim()(去掉串右边的空格),还支持LTrim()及Trim()。 D.使用别名(alias),别名是一个字段或值的替换名。别名用AS关键字赋予。任何客户机应用都可以按名引用这个列。别名也可称导出列(derived COLUMN)。
10.3 执行算术计算 A.如何测试计算:SELECT提供了测试和试验函数与计算的一个很好的办法。
第十一章 使用数据处理函数 11.1 函数 A.函数没有SQL的可移植性强:能运行在多个系统上的代码称为可移植的(portable)。如果你使用函数,应该保证做好代码注释。 B.用于处理文本串的文本函数。用于在数值数据上进行算术操作的数值函数。用于处理日期和时间值并从这些值中提取特定成分的日期和时间函数。返回DBMS正使用的特殊信息的系统函数。
C. SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。
D. MySQL使用的日期格式:yyyy-mm-dd,应该总是使用4位数字的年份。
第十二章 汇总数据 12.1 聚集函数 A.确定表中行数,获得表中行组的和,找出表列的最大值,最小值和平均值。要的是汇总信息,而不是表中数据。 B. 聚集函数(aggregate function):运行在行组上,计算和返回单个值的函数。
C.只用于单个列,AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。AVG()函数忽略列值为NULL的行。 12.2 聚集不同值 A.对所有的行执行计算,指定ALL参数或不给参数(因为ALL是默认行为)。只包含不同的值,指定DISTINCT参数。DISTINCT必须使用列名,不能用于计算或表达式。 12.3 组合聚集函数
|