MySQL必知必会
概述
MySQL是一种数据库管理系统(DBMS),所管理的都是关系型数据库,特点就是以表的形式来存储数据,一个数据库中可以有多张表,表中划分为行和列,可以将一行对应于一个对象,而每一列所表示的就是对象的各个属性。在MySQL中用主键(Primary Key)来唯一的标识某一行,主键是一个列也可以是一组列,它通常还可以用以建立表之间的关联关系。在该书中,主要目的是介绍如何使用SQL语句来实现高效的表处理。
1 检索数据 select
在使用数据库的大部分时间里,使用者都是在做查询操作,select用于从表中获取列并输出出来,它通常搭配多个子句来使用,这里按照子句顺序来列出常用的:
子句 | 说明 | 是否必须使用 |
---|---|---|
select | 要返回的列或表达式 | 是 |
from | 从中检索的表 | 仅在从表中选择数据时使用 |
where | 行级过滤 | 否 |
group by | 分组说明 | 在按组聚集时使用 |
having | 组级过滤 | 否 |
order by | 输出排序顺序 | 否 |
limit | 要检索的行数 | 否 |
2 数据过滤
我们通常是不需要返回所有行的,而是根据指定的搜索条件来返回,通常可用的方法是:
- 使用where子句,IN操作符,NOT操作符
- 用通配符进行过滤
- 用正则表达式进行过滤
- 使用子查询
此外,还可以对检索出来的数据进行计算,得到一个新的列,称之为计算字段,可以把它理解为计算结果列。
3 联结表
联结操作(Join)是一种用于将多个表的数据组合在一起以进行复杂查询的方法。联结操作通过共享一个或多个共同列(通常是关联列)来合并不同表的数据,以创建新的虚拟表格,供查询使用。
关联列: 联结操作通常需要指定连接两个表的关联列。这些列在两个表中具有相同的值,以便于我们可以同时在俩个表中搜索
4 组合查询
用union来组合多条select语句进行查询
5 全文本索引
通过某一单词或部分文本找匹配项时,可以通过通配符和正则表达式来实现,但是它们需要搜索所有的行,效率比较低,因此引入全文本搜索,在全文本搜索时不需要查看所有行。在使用全文本搜索之前,MySQL创建指定列中各词的一个索引,搜索可以针对这些词来进行,之后在更新行时,索引会随之自动更新。
全文本索引通常搭配match()和against使用,MyISM引擎支持,mysql引擎是不支持的
6 数据插入、更新和删除
插入:insert into 表名(列名) values(每一列的值);
更新:update 表名 set ...
删除:delete
7 表操作
创建、更新、删除、重命名
8 视图
可以理解为一个封装的select语句,目的是重用sql语句而不必关注该sql语句的具体细节
create view 视图名 as ...
9 存储过程
封装多个sql语句,用call和()来调用它,内部可以用IN、OUT设置变量,定义函数调用符内的参数(用@打头来定义)来接收返回值
10 触发器
每个表最多可以定义6个触发器,分别针对delete,insert,update的使用前后
11 事务
事务处理是为了保障一组sql语句执行时不会被打断,它依赖于回退机制和提交机制,当某一操作失败时进行rollback或者不commit
12 引擎
对于MyISAM:
- 支持全文本搜索,不支持事务处理
对于Innodb: - 支持事务处理但不支持全文本搜索。