首页 > 代码库 > mysql必知必会笔记
mysql必知必会笔记
一、了解sql
数据库是一个以某种有组织的方式存储的数据集合。
数据库基础
数据库(database) 保存有组织的数据的容器(通常是一个文件或一组文件)。
表(table) 某种特定类型数据的结构化清单。
模式(schema) 关于数据库和表的布局及特性的信息。
列(column) 表中的一个字段。所有表都是由一个或多个列组成的。
数据类型(datatype) 所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。
行(row) 表中的一个记录。
主键(primary key)①一一列(或一组列),其值能够唯一区分表中每个行。
二、MYSQL简介
1.什么是mysql
mysql是一种DBMS即它是一种数据库软件。
DBMS可分为两类:一类为基于共享文件系统的DBMS,另一类为基于客户机—服务器的DBMS。
2.mysql管理工具
(1)命令行:
每个MySQL安装都有一个名为mysql的简单命令行实用程序。这个实用程序没有下拉菜单、流行的用户界面、鼠标支持或任何类似的东西。
例如,为了指定用户登录名ben,应该使
用mysql -u ben。为了给出用户名、主机名、端口和口令,
应该使用mysql -u ben -p -h myserver -P 9999。
(2)MySQL Administrator
MySQL Administrator(MySQL管理器)是一个图形交互客户机,用来简化MySQL服务器的管理。
(3)MySQL Query Browser
MySQL Query Browser为一个图形交互客户机,用来编写和执行MySQL命令。
三、使用MYSQL
四、检索数据
1.select语句
检索不同的行distinct
限制结果 limit3,4 limit 4 offset 3 从第三行开始取4行
五、排序检索数据
1.排序数据
子句(clause) SQL语句由子句构成,有些子句是必需的,而有的是可选的。
为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。
2.多个列排序
为了按多个列排序,只要指定列名,列名之间用逗号分开即可(就像选择多个列时所做的那样)。
3.指定排序方向
desc---降序
默认升序--asc
当需要对多个列指定方向时,DESC关键字只应用到直接位于其前面的列名。
六、过滤数据
1.
使用where子句
2.
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。
1.
where字句操作符
2.
= ,<> ,!= ,between 空值检查:IS NULL
七、数据过滤
1.
组合where语句
2.
第6章中介绍的所有WHERE子句在过滤数据时使用的都是单一的条件。为了进行更强的过滤控制,MySQL允许给出多个WHERE子句。
AND 用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。
OR操作符与AND操作符不同,它指示MySQL检索匹配任一条件的行。
2.IN操作符
圆括号在WHERE子句中还有另外一种用法。IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。
为什么要使用IN操作符?其优点具体如下。
q 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
q 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
q IN操作符一般比OR操作符清单执行更快。
q IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建
立WHERE子句
3.NOT操作符
WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。
八、用通配符进行过滤
1.
like操作符
2.
通配符(wildcard) 用来匹配值的一部分的特殊字符。
搜索模式(search pattern)① 由字面值、通配符或两者组合构成的搜索条件。
通配符
最常使用的通配符是百分号(%)。在搜索串中,%表示任何字符出现任意次数
另一个有用的通配符是下划线(_)。下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。
2.通配符使用技巧
九、使用正则表达式进行搜索
1.
正则表达式介绍
2.
3.
使用MYSQL正则表达式
4.
REGEXP
十、创建计算字段
1.
计算字段
2.
计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的。
字段(field) 基本上与列(column)的意思相同,经常互换使用,不过数据库列一般称为列,而术语字段通常用在计算字段的连接上
2.拼接字段
拼接(concatenate) 将值联结到一起构成单个值。
在MySQL的SELECT语句中,可使用Concat()函数来拼接两个列。
3.使用别名
SELECT语句拼接地址字段工作得很好。但此新计算列的名字是什么呢?实际上它没有名字,它只是一个值。但是,一个未命名的列不能用于客户机应用中,因为客户机没有办法引用它。为了解决这个问题,SQL支持列别名。
别名(alias)是一个字段或值的替换名。别名用AS关键字赋予。
导出列 别名有时也称为导出列(derived column),
别名还有其他用途。常见的用途包括在实际的表列名包含不符合规定的字符(如空格)时重新命名它,在原来的名字含混或容易误解时扩充它,等等。
十一、使用数据处理函数
1.
使用函数
2.
大多数SQL实现支持以下类型的函数。
q 用于处理文本串(如删除或填充值,转换值为大写或小写)的文
本函数。
q 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)
的数值函数。
q 用于处理日期和时间值并从这些值中提取特定成分(例如,返回
两个日期之差,检查日期有效性等)的日期和时间函数。
q 返回DBMS正使用的特殊信息(如返回用户登录信息,检查版本
细节)的系统函数。
十二、汇总数据
1.
聚集函数
2.
聚集函数(aggregate function) 运行在行组上,计算和返回单个值的函数。
AVG()通过对表中行数计数并计算特定列值之和,求得该列的平均值
COUNT()函数进行计数。可利用COUNT()确定表中行的数目或符合特定条件的行的数目。
MAX()返回指定列中的最大值。MAX()要求指定列名
MIN()的功能正好与MAX()功能相反,它返回指定列的最小值。
SUM()用来返回指定列值的和(总计)。
十三、分组数据
1.
数据分组
2.
分组是在SELECT语句的GROUP BY子句中建立的
2.过滤分组
除了能用GROUP BY分组数据外,MySQL还允许过滤分组,规定包括哪些分组,排除哪些分组。
目前为止所学过的所有类型的WHERE子句都可以用HAVING来替代。唯一的差别是WHERE过滤行,而HAVING过滤分组。
语句:
十四、使用子查询
1.
子查询
2.
查询(query) 任何SQL语句都是查询。但此术语一般指SELECT语句。
2.利用子查询进行过滤
在SELECT语句中,子查询总是从内向外处理。
3.作为计算字段使用子查询
相关子查询(correlated subquery) 涉及外部查询的子查询。
这种类型的子查询称为相关子查询。任何时候只要列名可能有多义性,就必须使用这种语法(表名和列名由一个句点分隔)。
十五、连结表
1.
联结
2.
(1)SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表。
外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。
可伸缩性(scale) 能够适应不断增加的工作量而不失败。
(2)如果数据存储在多个表中,使用联结检索出数据
2.创建联结
(1)where子句
笛卡儿积(cartesian product) 由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。
(2)内部联结
目前为止所用的联结称为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内部联结
(3)联结多个表
十六、创建高级联结
1.
使用不同类型的联结
2.
自联结
自然联结
外部联结
2.使用带聚函数的联结
十七、组合查询
1.组合查询
多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句。MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)或复合查询
(compound query)。
UNION
2.UNION规则
正如所见,并是非常容易使用的。但在进行并时有几条规则需要注意。
q UNION必须由两条或两条以上的SELECT语句组成,语句之间用关
键字UNION分隔(因此,如果组合4条SELECT语句,将要使用3个
UNION关键字)。
q UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过
各个列不需要以相同的次序列出)。
q 列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以
隐含地转换的类型(例如,不同的数值类型或不同的日期类型)。
如果遵守了这些基本规则或限制,则可以将并用于任何数据检索任务。
十八、全文本搜索
进行全文本搜索,
使用两个函数Match()和Against()执行全文本搜索,其中Match()指定被搜索的列,Against()指定要使用的搜索表达式。
十九、插入数据
1.数据插入
insert
2.插入完整的行
3.插入多个行
二十、更新和删除数据
1.为了更新(修改)表中的数据,可使用UPDATE
2.删除
二十一、创建和操纵表
1.创建表
为利用CREATE TABLE创建表,必须给出下列信息:
q 新表的名字,在关键字CREATE TABLE之后给出;
q 表列的名字和定义,用逗号分隔。
2.更新表
ALTER TABLE
3.删除表
删除表(删除整个表而不是其内容)非常简单,使用DROP TABLE语
二十二、使用视图
1.视图
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态
检索数据的查询。
q 视图用CREATE VIEW语句来创建。
q 使用SHOW CREATE VIEW viewname;来查看创建视图的语句。
q 用DROP删除视图,其语法为DROP VIEW viewname;。
q 更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE OR
REPLACE VIEW。如果要更新的视图不存在,则第2条更新语句会创建一个视图;如果要更新的视图存在,则第2条更新语句会替换原有视图。
二十三、使用存储过程
1.存储过程
迄今为止,使用的大多数SQL语句都是针对一个或多个表的单条语
句。并非所有操作都这么简单,经常会有一个完整的操作需要多条语句
才能完成。可以创建存储过程。存储过程简单来说,就是为以后的使用而保存
的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用
不仅限于批处理。
2.为什么要使用存储过程
3.使用存储过程
执行存储过程
MySQL称存储过程的执行为调用,因此MySQL执行存储过程的语句为CALL。CALL接受存储过程的名字以及需要传递给它的任意参数
Call productpricing(@pricelow,@pricehigh,@priceaverage)
创建存储过程
Create PROCEDUCT productpricing()
Begin
Select Avg(prod_price) as priceaverage
From products;
End;
删除存储过程
Drop product productpricing
使用参数
变量(variable)内存中一个特定的位置,用来临时存储数据。
二十四、使用游标
1.游标
游标(cursor)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。
游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。
2.使用游标
创建游标
打开和关闭游标
二十五、使用触发器
1.触发器
触发器是MySQL响应以下任意语句而
自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语
句)
2.创建触发器
3.删除触发器
Drop trigger newproduct;
4.使用触发器
Insert触发器、update触发器、delete触发器
二十六、管理实务处理
1.事务处理
事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。
事务处理需要知道的几个术语:
q 事务(transaction)指一组SQL语句;
q 回退(rollback)指撤销指定SQL语句的过程;
q 提交(commit)指将未存储的SQL语句结果写入数据库表;
q 保留点(savepoint)指事务处理中设置的临时占位符(placeholder),
你可以对它发布回退(与回退整个事务处理不同)。
2.控制事务处理
(1)管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。
Start Transaction
Rollback
(2)在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用COMMIT语句
(3)使用保留点
每个保留点都取标识它的唯一名字,以便在回退时,MySQL知道要回退到何处。为了回退到本例给出的保留点。
Savepoint delet1
Rollback to delete1;
(4)更改默认的提交行为
Set autocommit = 0
二十七、全球化和本地化
1.字符集和校对顺序
q 字符集为字母和符号的集合;
q 编码为某个字符集成员的内部表示;
q 校对为规定字符如何比较的指令。
2.使用字符集和校对顺序
Show character set;
二十八、安全管理
1.访问控制
MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。
2.管理用户
(1)创建用户账号
Create user ben indentified by ‘p@$$word’;
重命名 rename
(2)删除用户账号
Drop user bforta;
(3)设置访问权限
Show grants for bforta;
为设置权限,使用GRANT语句。GRANT要求你至少给出以下信息:
q 要授予的权限;
q 被授予访问权限的数据库或表;
q 用户名。
GRANT的反操作为REVOKE,用它来撤销特定的权限
GRANT和REVOKE可在几个层次上控制访问权限:
q 整个服务器,使用GRANT ALL和REVOKE ALL;
q 整个数据库,使用ON database.*;
q 特定的表,使用ON database.table;
q 特定的列;
q 特定的存储过程。
语句:
grant select on crashcourse.* to bforta;
revoke select on crashcourse.* to bforta;
(4)更改口令
为了更改用户口令,可使用SET PASSWORD语句。新口令必须如下加密:
set password for bforta = Password(‘n3w p@$$word‘);
二十九、数据库维护
1.备份数据
2.进行数据库维护
ANALYZE TABLE,用来检查表键是否正确。
CHECK TABLE用来针对许多问题对表进行检查。在MyISAM表上还对索引进行检查。
如果MyISAM表访问产生不正确和不一致的结果,可能需要用REPAIR TABLE来修复相应的表。
如果从一个表中删除大量数据,应该使用OPTIMIZE TABLE来收回所用的空间,从而优化表的性能。
3.诊断启动问题
在排除系统启动问题时,首先应该尽量用手动启动服务器。MySQL
服务器自身通过在命令行上执行mysqld启动。下面是几个重要的mysqld
命令行选项:
q --help显示帮助——一个选项列表;
q --safe-mode装载减去某些最佳配置的服务器;
q --verbose显示全文本消息(为获得更详细的帮助消息与--help
联合使用);
q --version显示版本信息然后退出
4.查看日记文件
错误日记
查询日记
二进制日记
缓慢查询日记
三十、改善性能
数据库管理员把他们生命中的相当一部份时间花在了调整、试验以改善DBMS性能之上。在诊断应用的滞缓现象和性能问题时,性能不良的数据库(以及数据库查询)通常是最常见的祸因。
mysql必知必会笔记