一 数据库的隔离级别有几个?
1.读未提交,最低级别
2.读已提交,可以防止脏读
3.可重复读,可以防止脏读、不可重复读
4.串行话,可以避免脏读、不可重复读、幻读
什么是脏读、不可重复读、幻读????
脏读就是一个事务读取到另外一个事务未提交的数据,可能引发数据库中的数据回滚。
不可重复读就是一个事务先读取一次数据,另一个事务修改数据,第一个事务读取数据发现不一致了。
幻读就是两个事务操作数据库,第一次读取数据和第二次的数据不一样,缺少了或者增加了数据。
不可重复读重在数据被修改,幻读重在对数据进行了添加或删除。
二 数据库存储的方式有几种
1.冷备份
定期的将数据库中的数据进行转储
2.热备份
当主数据库宕机,从数据库从主数据库发生问题之前的二进制日志中备份
3.双机热备
数据库互为主从,提升数据库的高可用,当一个数据库发生问题后另一个数据库立马启动,防止发生雪崩现象。
三 Sql注入是什么,怎么防止?
Sql注入就是当我们的sql语句是拼接的方式的时候,别人可以通过添加全真操作读取数据库中的所有数据,数据库数据不安全 例如:"select * from students where id = "+id ,其中的id是一个参数,用户传入 1 or 1=1,那么就可以拿到所有数据。正确应该是"select * from students where id = ?",用?进行占位。
防止sql注入用的是占位符的方式,主要就是调用prepareStatement对象,先把sql框架提交给数据库服务器,咱把参数单独提交给数据库。
四 sql优化
1.尽量不要使用*,使用字段名
2.用in代替or
3.尽量不要使用子查询,使用联接查询的方式,小表join大表
4.尽量不要使用order by
5.索引不能超过6个
6.尽量使用中间表(两个表之间的关系表)
7.使用explain查询sql语句的性能
五 事务
事务是数据库操作的逻辑单位,它的特性是ACID。
原子性:要么全部执行,要么全部不执行
一致性:操作数据后,数据库也要发生变化,比如银行存钱,存入后,银行卡余额也要改变
隔离性:一个事务操作数据库的时候,另一个事务不能够操作
持久性:存储在数据库中的数据长期有效