MySQL读书笔记

来源:互联网 发布:js object tostring 编辑:程序博客网 时间:2024/06/05 03:47

MySQL两种存储引擎的区别

InnoDB:
1、大数据
2、提交、回滚、崩溃恢复,事务日志处理数据恢复,快
3、与mysql服务器完全整合
4、主内存缓存数据和索引而维持自己的缓冲池
5、不保存表的具体行数

MyISAM:
1、小数据
2、count()快
3、全文索引,系统内建的
3、最大索引数是64,可以通过重新编译来改变,每个索引最大列数是16个


事务的acid特性

原子性、一致性,隔离性、持久性

触发器的好处

1、实现检查约束
2、维护冗余数据
3、模拟外键级联选项

预处理sql语句

只有解析成功才会缓存到内存

先解析,到需要执行时再执行

静态sql语句都是直接解析运行

如何如何遍历游标的“结果集”

1、在存储过程中遍历结果
2、用hibernateTemplate查询

以一个简单的sql查询语句来简要说明一下mysql预处理的功能。

调用mysql c api的预处理函数,执行预处理功能的步骤一般如下:

1) 先调用mysql_init(),初始化一个MYSQL对象,用于与数据库的链接句柄

2) 调用mysql_real_connect()链接数据库服务端

3) 调用mysql_stmt_init()初始化一个MYSQL_STMT对象,用于处理对应的预处理操作

4) 调用mysql_stmt_prepare()接口,上传预处理的sql语句

5) 定义相应的MYSQL_BIND数据结构,调用mysql_stmt_bind_param用于绑定输入参数

6) 如果有输出结果集,可以选择调用mysql_stmt_result_metadata()接口以结果集MYSQL_RES形式返回预处理语句元数据。

7) 调用mysql_stmt_execute()执行相应的sql查询操作

8) 如果有输出结果,调用mysql_stmt_bind_result将输出结果绑定到MYSQL_BIND数据结构对象上,同时调用mysql_stmt_store_result()将所有的结果集保存到客户端的缓冲区中,并通过mysql_stmt_fetch()来进行调用获取返回的每行的值

sql语句 静态sql和动态sql

1、静态SQL则只能针对某几个特定的表来形成分页。
2、而使用动态的SQL,则可以对不同的表,不同的字段进行不同的分页

动态sql和静态sql

.两者的异同
1、 静态SQL为直接嵌入到PL/SQL中的代码,而动态SQL在运行时,根据不同的情况产生不同的SQL语句。
2、 静态SQL为在执行前编译,一次编译,多次运行。动态SQL同样在执行前编译,但每次执行需要重新编译。
3、 静态SQL可以使用相同的执行计划,对于确定的任务而言,静态SQL更具有高效性。但缺乏灵活性
4、 动态SQL使用了不同的执行计划,效率不如静态SQL,但能够解决复杂的问题。
5、 动态SQL容易产生SQL注入,为数据库安全带来隐患。

  • 锁的粒度可以分为服务器级锁和存储引擎级锁(表级锁、行级锁)
  • 隐式锁(系统自动给数据加锁)和显式锁(程序员负责)
  • InnoDB行级锁产生死锁(会自动检测死锁)
    MyISAM添加表级锁会一次性给mysql语句添加全部锁

聚集索引和非聚集索引区别

聚集索引:这种索引中键值的逻辑顺序决定了表中相应行的物理顺序
非聚集索引:这种索引的逻辑顺序与磁盘上行的物理存储顺序不同

MySQL逻辑架构

这里写图片描述
最上层:类似常见的网络的客户端/服务端,比如连接处理、授权认证、安全等等
第二层:核心服务,包括查询解析、分析、优化、缓存以及所有的内置函数(比如,日期、时间、数学和加密函数),所有跨存储引擎的功能都在这层实现:存储过程、触发器、视图等
第三层:包含存储引擎,存储引擎负责MySQL中数据的存储和提取。存储引擎只是简单地响应上层服务器的请求,不会解析sql,也不会互相通信

原创粉丝点击