Java基础

MySQL详解6.高级特性

2019-01-16  本文已影响7人  卢卡斯哔哔哔

点击进入我的博客

1 分区表

分区表是一个独立的逻辑表,但底层是由多个物理字表构成的。

2 视图

视图本身是一个虚拟表,不存放任何数据。在使用SQL语句访问视图的时候,它返回的数据是 MySQL从其他表中生成的。视图和表是在同一个命名空间,MySQL在很多地方对于视图和表是同样对待的。

实现视图最简单的方法是将 SELECT 语句的结果存放到临时表中。当需要访问视图的时候,直接访问这个临时表就可以了。

CREATE VIEW view_name AS
SELECT * FROM tb_name [WHERE]
WITH CHECK OPTION
可更新视图

可更新视图是指可以通过更新这个视图来更新视图设计的相关表。

视图的限制

3 外键

InnoDB是目前 MySQL中唯一支持外键的内置存储引擎

外键的成本
外键的好处

4 在MySQL内部存储代码

MySQL允许通过触发器、存储过程、函数的形式来存储代码。从 MySQL5.1开始,还可以在定时任务中存放代码,这个定时任务也被称为“事件”。

4.1 函数

函数存储着一系列SQL语句,调用函数就是一次性执行这些语句。

4.2 存储过程

SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。

DELIMITER //
CREATE PROCEDURE insert_data(IN loops INT)
BEGIN
    DECLARE i INT;
    SET i = loops;
    WHILE i > 0 DO
        INSERT INTO tb_name (name, value) VALUES ('ZZX', '123');
        SET i = i - 1;
    END WHILE;
END;
//
DELIMITER ;
存储过程与自定义函数的区别:

4.3 触发器

4.4 事件

5 游标

MySQL在服务器端提供只读的、单向的游标,而且只能在存储过程或者更底层的客户端API中使用。因为MySQL游标中指向的对象都是存储在临时表中而不是实际查询到的数据,所以 MySQL游标总是只读的。它可以逐行指向查询结果,然后让程序做进步的处理。

6 绑定变量

从 MySQL4.1版本开始,就支持服务器端的绑定变量(prepared statement),这大大提高了客户端和服务器端数据传输的效率。

创建绑定变量

当创建一个绑定变量SQL时,客户端向服务器发送了一个SQL语句的原型。服务器端收到这个SQL语句框架后,解析并存储这个SQL语句的部分执行计划,返回给客户端个SQL语句处理句柄。以后每次执行这类查询,客户端都指定使用这个句柄。

使用绑定变量

绑定变量的SQL,使用问号标记可以接收参数的位置,当真正需要执行具体查询的时候,则使用具体值代替这些问号。例如,下面是一个绑定变量的SQL语句,可以通过向服务器端发送各个问号的取值和这个SQL的句柄来执行一个具体的查询:
INSERT INTO tb (col1, col2, col3) VALUES (?,?, ?)

7 自定义函数

从很早开始,MySQL就支持用户自定义函数(UDF)。存储过程只能使用SQL来编写,而UDF没有这个限制,你可以使用支持C语言调用约定的任何编程语言来实现。UDF必须事先编译好并动态链接到服务器上,这种平台相关性使得UDF在很多方面都很强大。

8 插件

9 字符集和校对集

字符集是指一种从二进制编码到某类字符符号的映射,可以参考如何使用一个字节来表示英文字母。“校对”是指一组用于某个字符集的排序规则。

默认设置
查看字符集和校对集

10 全文索引

通过数值比较、范围过滤等就可以完成绝大多数我们需要的查询了。但是,如果你希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较。全文索引就是为这种场景设计的。
全文索引有着自己独特的语法。没有索引也可以工作,如果有索引效率会更高。
全文索引可以支持各种字符内容的搜索(包括CHAR、VARCHAR和TEXT类型),也支持自然语言搜索和布尔搜索。

11 分布式事务

12 查询缓存

MySQL查询缓存保存查询返回的完整结果。当查询命中该缓存,MySQL会立刻返回结果,跳过了解析、优化和执行阶段。查询缓存系统会跟踪查询中涉及的每个表,如果这些表发生变化,那么和这个表相关的所有的缓存数据都将失效。
应用程序无须关心 MySQL是通过查询缓存返回的结果还是实际执行返回的结果,无论是 MySQL开启或关闭查询缓存,对应用程序都是透明的。
查询缓存无须使用任何语法。

如何判断缓存命中
什么时候需要查询缓存
上一篇 下一篇

猜你喜欢

热点阅读