这是我参与「第五届青训营 」伴学笔记创作活动的第 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)。