如何防止sql注入
- 最有效的方法,采用预编译指令集
- 使用正则表达式过滤参数
- 字符串过滤或替换
- 前端判断是否有非法字符,寻找出能sql注入的地方
mysql常用的优化方法
索引优化 (索引使用的是B+ tree)
- 列中有空值不建索引
- 使用短索引
- 对where子句使用的列建立索引
- 多个列where或order by的建立组合索引
- 对like语句,%开头不用结尾用(最左不用原则) why:索引相当于字典,不知道开头怎么查?
sql优化
- 使用join语句,使用内连接代替外连接,使用小表驱动大表
- 使用explain分析查询语句
- 查询日志,对执行慢的sql进行优化
- 千万级分页时使用limit
- 对于经常使用的查询,开启缓存
- 批量操作
表的优化
- 字段尽量设置为not null
- 字段长度固定
数据库优化
- 将表分区
- 读写分离/建立主从关系
mybatis的实现原理
根据配置->创建SQL sessionfactory->(根据配置文件,注解)sqlsession->执行映射的sql语句->关闭sqlsession。
悲观锁与乐观锁
乐观锁
首先假设数据冲突很少,只有在数据提交修改的时候才进行校验,如果冲突了则不会进行更新。
通常的实现方式增加一个version字段,为每一条数据加上版本。每次更新的时候version+1,并且更新时候带上版本号。
乐观锁在实际应用相对较多,它可以提供更好的并发访问,并且数据库开销较少,但是有可能存在脏读的情况。
悲观锁
当一个事务锁定了一些数据之后,只有当当前锁提交了事务,释放了锁,其他事务才能获得锁并执行操作。
悲观锁一般是用于并发不是很高,并且不允许脏读等情况。但是对数据库资源消耗较大。