diff --git "a/14\350\226\233\346\231\226/\344\275\234\344\270\232/9.29\350\241\214\345\210\227\350\275\254\346\215\242.md" "b/14\350\226\233\346\231\226/\344\275\234\344\270\232/9.29\350\241\214\345\210\227\350\275\254\346\215\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..b8aa1272e839dcc4546b0ef373e5005b75f502c8 --- /dev/null +++ "b/14\350\226\233\346\231\226/\344\275\234\344\270\232/9.29\350\241\214\345\210\227\350\275\254\346\215\242.md" @@ -0,0 +1,29 @@ + 列转行: union + +![img](https://img-blog.csdnimg.cn/a2273c0c1b97415ea7aa2f8e65563270.png) + +![img](https://img-blog.csdnimg.cn/e777ba0b843b445fb7058c59e45e9471.png) + +``` +select name,[subject] = 'english',(select english from test where name='jim') score from test where name='jim' +union +select name,[subject] = 'math',(select math from test where name='jim') score from test where name='jim' +union +select name,[subject] = 'chinese',(select chinese from test where name='jim') score from test where name='jim' +``` + +![img](https://gitee.com/snailclass/tuchuang/raw/master/img/image-20220926133049154-2022-9-2613:31:10.png) + +行转列:pivot, Case when + +连续登陆, 留存率 + +``` +SELECT year as 'year', + MAX(CASE WHEN mouth = '1' THEN amount END) AS 'm1', + MAX(CASE WHEN mouth = '2' THEN amount END) AS 'm2', + MAX(CASE WHEN mouth = '3' THEN amount END) AS 'm3', + MAX(CASE WHEN mouth = '4' THEN amount END) AS 'm4' +FROM +GROUP BY year; +``` diff --git "a/14\350\226\233\346\231\226/\347\254\224\350\256\260/9.29\345\210\227\350\275\254\350\241\214\345\222\214\350\247\246\345\217\221\345\231\250.md" "b/14\350\226\233\346\231\226/\347\254\224\350\256\260/9.29\345\210\227\350\275\254\350\241\214\345\222\214\350\247\246\345\217\221\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..0477976f087afe6d5d18b8f107e97c1b67dc3c8f --- /dev/null +++ "b/14\350\226\233\346\231\226/\347\254\224\350\256\260/9.29\345\210\227\350\275\254\350\241\214\345\222\214\350\247\246\345\217\221\345\231\250.md" @@ -0,0 +1,88 @@ +UNION 与 UNION ALL的区别: + +1.对重复结果的处理: UNION会去掉重复记录,UNION ALL不会 + +2.对排序的处理: UNION会排序,UNION ALL只是简单地将两个结果集合并 + +3.效率方面的区别: 因为UNION会做去重和排序处理,因此效率比UNION ALL慢很多 + +# 事务隔离 + +SQL标准中规定了4种事务隔离级别,就是说多个事务[并发](https://gitee.com/link?target=https%3A%2F%2Fso.csdn.net%2Fso%2Fsearch%3Fq%3D%E5%B9%B6%E5%8F%91%26spm%3D1001.2101.3001.7020)运行的时候,互相是如何隔离的,从而避免一些事务并发问题。 + +这4种级别包括了:read uncommitted(读未提交),read committed(读已提交),repeatable read(可重复读),serializable(串行化)。 + +## 四大级别 + +#### READ UNCOMMITTED : + +**read uncommitted** 读未提交,在该隔离级别,所有事务都可以看到其他未提交事务的执行结 果。产生脏读、不可重复读、幻读。 + +#### READ COMMITTED : + +**read commited** 读已提交,它满足了隔离的简单定义:一个事务只能看见已经提交事务所做 的改变。这是大多数数据库系统的默认隔离级别。可以避免脏读,但不可 重复读、幻读问题仍然存在。 + +#### REPEATABLE READ : + +**repeatable read** 可重复读,事务A在读到一条数据之后,此时事务B对该数据进行了修改并提 交,那么事务A再读该数据,读到的还是原来的内容。可以避免脏读、不可重复读,但幻读问题仍 然存在。 + +#### SERIALIZABLE : + +可串行化,确保事务可以从一个表中读取相同的行。在这个事务持续期间,禁止 其他事务对该表执行插入、更新和删除操作。所有的并发问题都可以避免,但性能十分低下。能避 免脏读、不可重复读和幻读。 + +## 数据并发问题 + +#### 脏写 + +对于两个事务 Session A、Session B,如果事务Session A 修改了 另一个 未提交 事务Session B 修改过 的数 据,那就意味着发生了 脏写 + +#### 脏读 + +``` +对于两个事务 Session A、Session B + +Session A 读取 了已经被 Session B 更新 但还 没有被提交 的字段。 + +之后若 Session B 回滚 ,Session A 读取 的内容就是 临时且无效 的。 + +Session A和Session B各开启了一个事务,Session B中的事务先将studentno列为1的记录的name列更新 为'张三',然后Session A中的事务再去查询这条studentno为1的记录, + +如果读到列name的值为'张三',而 Session B中的事务稍后进行了回滚,那么Session A中的事务相当于读到了一个不存在的数据,这种现象 就称之为 脏读 。 +``` + +#### 不可重复读 + +``` +对于两个事务Session A、Session B,Session A 读取 了一个字段,然后 Session B 更新 了该字段。 + +之后 Session A 同个事务内再次读取 同一个字段, 值就不同 了。 +(在同一个事务内多次查询同一个值却无法保持相同) + +那就意味着发生了不可重复读。 + +我们在Session B中提交了几个 隐式事务 (注意是隐式事务,意味着语句结束事务就提交了) + +这些事务 都修改了studentno列为1的记录的列name的值, + +每次事务提交之后,如果Session A中的事务都可以查看 到最新的值,这种现象也被称之为 不可重复读 。 +``` + +#### 幻读 + +``` +对于两个事务Session A、Session B, + +Session A 从一个表中 读取 了一个字段, 然后 Session B 在该表中插入了一些新的行 + +之后, 如果 Session A 再次读取同一个表, 就会多出几行。那就意味着发生了幻读。 + +Session A中的事务先根据条件 studentno > 0这个条件查询表student,得到了name列值为'张三'的记录 + +之后Session B中提交了一个 隐式事务 ,该事务向表student中插入了一条新记录 + +之后Session A中的事务 再根据相同的条件 studentno > 0查询表student + +得到的结果集中包含Session B中的事务新插入的那条记 录,这种现象也被称之为 幻读 + +我们把新插入的那些记录称之为 幻影记录 。 +```