首页 > 代码库 > 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创建表,必须给出下列信息:

新表的名字,在关键字CREATE TABLE之后给出;

表列的名字和定义,用逗号分隔。

技术分享 

2.更新表

ALTER TABLE

技术分享 

3.删除表

删除表(删除整个表而不是其内容)非常简单,使用DROP TABLE

 

二十二、使用视图

1.视图

视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态

检索数据的查询。

q 视图用CREATE VIEW语句来创建。

使用SHOW CREATE VIEW viewname;来查看创建视图的语句。

DROP删除视图,其语法为DROP VIEW viewname;

更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE OR

REPLACE VIEW。如果要更新的视图不存在,则第2条更新语句会创建一个视图;如果要更新的视图存在,则第2条更新语句会替换原有视图。

二十三、使用存储过程

1.存储过程

迄今为止,使用的大多数SQL语句都是针对一个或多个表的单条语

句。并非所有操作都这么简单,经常会有一个完整的操作需要多条语句

才能完成。可以创建存储过程。存储过程简单来说,就是为以后的使用而保存

的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用

不仅限于批处理。

2.为什么要使用存储过程

3.使用存储过程

执行存储过程

MySQL称存储过程的执行为调用,因此MySQL执行存储过程的语句为CALLCALL接受存储过程的名字以及需要传递给它的任意参数

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语句(或位于BEGINEND语句之间的一组语

句)

2.创建触发器

技术分享 

3.删除触发器

Drop trigger newproduct;

4.使用触发器

Insert触发器、update触发器、delete触发器

二十六、管理实务处理

1.事务处理

事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。

事务处理需要知道的几个术语:

事务transaction)指一组SQL语句;

回退rollback)指撤销指定SQL语句的过程;

提交commit)指将未存储的SQL语句结果写入数据库表;

保留点savepoint)指事务处理中设置的临时占位符(placeholder),

你可以对它发布回退(与回退整个事务处理不同)。

2.控制事务处理

1管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。

Start Transaction

Rollback

2在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用COMMIT语句

(3)使用保留点

每个保留点都取标识它的唯一名字,以便在回退时,MySQL知道要回退到何处。为了回退到本例给出的保留点

Savepoint delet1

Rollback to delete1;

(4)更改默认的提交行为

Set autocommit = 0

 

二十七、全球化和本地化

1.字符集和校对顺序

字符集为字母和符号的集合;

编码为某个字符集成员的内部表示;

校对为规定字符如何比较的指令。

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要求你至少给出以下信息:

要授予的权限;

被授予访问权限的数据库或表;

用户名。

GRANT的反操作为REVOKE,用它来撤销特定的权限

GRANTREVOKE可在几个层次上控制访问权限:

整个服务器,使用GRANT ALLREVOKE ALL

整个数据库,使用ON database.*

特定的表,使用ON database.table

特定的列;

特定的存储过程。

语句:

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

命令行选项:

--help显示帮助——一个选项列表;

--safe-mode装载减去某些最佳配置的服务器;

--verbose显示全文本消息(为获得更详细的帮助消息与--help

联合使用);

--version显示版本信息然后退出

4.查看日记文件

错误日记

查询日记

二进制日记

缓慢查询日记

三十、改善性能

数据库管理员把他们生命中的相当一部份时间花在了调整、试验以改善DBMS性能之上。在诊断应用的滞缓现象和性能问题时,性能不良的数据库(以及数据库查询)通常是最常见的祸因。

 

 

 


mysql必知必会笔记