文章目录
1. 脏读,不可重复读,幻读
1.1 概念
1.脏读:
事务A和事务B对同一数据进行操作,A读B写,B写入数据后A读取,然后B进行了rollback回滚操作,此时发生脏读,A读入的数据为脏数据.
2.不可重复读:
事务A和事务B对同一数据进行操作,A读B写,A读取后B写入,然后A又进行了读取,导致A前后两字读取的数据不一致,这就是不可重复读.
3.幻读
事务A和事务B对同一堆数据进行操作,A读B写,A读了这堆数据,B对这堆数据进行了增减操作,然后A又对这堆数据读取,读取的两次数据状态不一致,就是幻读.
注意不可重复读和幻读的概念很像,不可重复读强调对同一数据,幻读强调对数据集合的增减
1.2 两类丢失更新
第一类丢失更新和脏读类似,事务A和事务B对同一数据进行修改,A完成修改后,B进行了回滚导致数据更新丢失.
第二类丢失更新和不可重复读类似,事务A和事务B对同一数据修改,A完成修改后,B再完成修改覆盖了A的修改导致更新丢失.
1.3 别人的
2. ACID
2.1 概念
ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability).这是可靠数据库所应具备的几个特性.
- 原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。
- 一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
- 多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
这指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并 发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后 的状态,事务不会查看到中间状态的数据。
在Windows中,如果多个进程对同一个文件进行修改是不允许的,Windows通过这种方式来保证不同进程的隔离性:
企业开发中,事务最复杂问题都是由事务隔离性引起的。当多个事务并发时,SQL Server利用加锁和阻塞来保证事务之间不同等级的隔离性。一般情况下,完全的隔离性是不现实的,完全的隔离性要求数据库同一时间只执行一条事务,这样会严重影响性能。想要理解SQL Server中对于隔离性的保障,首先要了解并发事务之间是如何干扰的. - 持久性,意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
2.2 别人的
3. 隔离级别
3.1 级别
读未提交,读已提交,可重复读,串行化
3.2 数据库默认
一般数据库都是默认的读已提交,而mysql默认的是可重复读,但是用的时候要用读已提交.
mysql读已提交有bug,就是主从复制的 时候主机先删后插,binlog为STATEMENT格式导致从机先插后删.
大佬
4. SQL语言
4.1 分类
关系型数据库的SQL语句都可以分为4大类:
- DDL(数据定义语言)
DDL 主要是指如下的四种SQL 语句,以 CREATE、DROP、ALRET开头和 TRUNCATE TABLE 语句。这里主要说一下 TRUNCATE TABLE ,截断表的数据,也就是删除表中的数据,删除这些数据的时候,系统不做日志,因此无法恢复,删除的速度比较快;而DELETE 语句也是删除表中的记录,但它要写日志,删除的数据可以恢复,数据量大的时候删除比较慢。 - DML(数据操纵语言)
它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。 - DQL(数据查询语言)
例如:SELECT语句 - DCL(数据控制语言)
是指授予权限和回收权限语句,既是grant、revoke、deny 等语句。 - TCL(事务处理语言)
事物处理语言是指提交、回滚和保留点3句SQL,既是commit、rollback和savepoint。事务是指一系列的连续的不可分割的数据库操作,这些操作要么同时成功,要么同时失败。oracle 的默认事务模型是显式事务模型,即执行完DML后必须手动提交或回滚。
5. Mybatis的mapper.xml文档中用到的#{}和${}
- #{}是预编译处理,$ {}是字符串替换。
- MyBatis在处理#{}时,会将SQL中的#{}替换为?号,使用PreparedStatement的set方法赋值;MyBatis在处理${ } 时,就是把${ } 替换成变量的值。
- 使用 #{} 可以有效的防止SQL注入,提高系统安全性。
- 因为#{}是占位符操作,所以不能用占位符的地方就要用${}了,比如order by后,原因也可能是#{}会自动拼接引号而${}不会.
6.跨域
跨域是浏览器的url地址和axios的请求地址之间,协议,域名,端口号全部相同才是同域,否则就是跨域.
7.vue生命周期
创建一个空vue对象
brforecreated
vue对象data初始化
created
vue对象el初始化
beforemount
挂载
mounted
beforeuptade
uptaded
beforedestroy
destroyed
8.async和方法顺序
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>内外</title>
</head>
<body>
<div id="app">
<button @click="ceshi()">点击</button>
</div>
<script src="../js/axios.js"></script>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el:"#app",
methods:{
/*
函数比async先运行
*/
async findAll() {
alert("我在哪里")
let {
status:status} = await axios.get("http://localhost:8090/axios/findAll")
if(status===200){
alert("查看完成")
}else{
alert("查看失败")
}
},
dayin(){
alert("打印")
},
ceshi(){
alert("查看之前")
this.findAll()
this.dayin()
alert("查看之后")
}
}
})
// function one(){
// alert(1)
// }
// function two(){
// alert(2)
// one()
// alert(3)
// }
// two()
</script>
</body>
</html>
经过测试,axios之外的东西运行完毕才开始运行axios
9.springMVC中用不用配置包扫描以及spring创建的单例对象
应该是不用配置包扫描,在启动类启动的时候自己就去扫描了,mapper要指定一下因为是mybatis的,
但是做实验的时候出现了一个必须配置包扫描才能完成运行的案例,所以待定吧.
spring创建的单例对象第一次拿出来做了更改第二次再拿出来是什么样子?
实验结果是第二次的还是初始的样子,不知道为啥,待定.