数据库杂项|青训营笔记

52 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天

ACID事务

事务是一系列操作的集合

A原子性:事务不可分割

C一致性:数据库从一个一致性的状态(只包含事务正确递交的结果)到另一个一致性状态

I隔离性:不能被其他事务干扰

D持久性:事物的操作对数据库是永久性修改

mysql事务模式

自动递交事务:每一条语句都自动commit

显示事务:显式调用事务开启和结束来定义事务

隐式事务:每个语句都是事务,commit或rollback来结束事务

隔离级别

隔离级别越高可靠性越高,并发量越低,开销越大。

READ UNCIMMITTED未递交读:一个事务没有递交另一个事务就能看到。也就是脏读

READ COMMITTED提交读:一个事务commit之后才能被其他事务看到修改结果。会有不可重复读,即一个事务的两次读取可能因为其他事务commit而不一样

REPEATABLE READ可᯿复读:保存刚进入事务进行时的结果。会有幻读,即其他事务增加删除记录,但本事务看不出

SERIALIZABLE串行:只能有1个事务同时操作

数据库连接池

维护一定数量的数据库连接,暴露数据库连接的获取和返回方法。释放数据库连接时并没有关闭连接,避免频繁创建释放,有更快的响应速度,方便连接管理。

SQL注入

在用户输入的字符串中掺杂正确的sql语句,程序没有检查到,就当作sql语句执行

避免SQL注入:校验输入的字符串、参数化查询(?c1表示c1处的参数,在命令编译后才套用参数执行)、数据加密、限制权限

执行顺序

先有表(from、on、join),才能过滤(where),再才能分组(group、having),再才能选择去重(select distinct),再才能排序(order by),最后才能分页(limit)。