Skip to content

Commit 976e833

Browse files
committed
no message
1 parent 2591243 commit 976e833

10 files changed

Lines changed: 124 additions & 5 deletions

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@
7575

7676
Redis 核心知识
7777

78-
- SQL
78+
- [SQL](notes/SQL.md)
7979

80-
常用 SQL 语句,敬请期待
80+
常用 SQL 语句
8181

8282

8383

notes/MySQL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ Sname, Sdept 和 Mname 都部分依赖于键码,当一个学生选修了多门
315315

316316
### 2. 脏读
317317

318-
   (针对未提交数据)如果一个事务中对数据进行了更新,但**事务还没有提交**,另一个事务可以 “看到” 该事务没有提交的更新结果,这样造成的问题就是,如果第一个事务回滚,那么,第二个事务在此之前所 “看到” 的数据就是一笔脏数据。 **(脏读又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读。 )**
318+
   (针对未提交数据)如果一个事务中对数据进行了更新,但**事务还没有提交**,另一个事务可以 “看到” 该事务没有提交的更新结果,这样造成的问题就是,如果第一个事务回滚,那么,第二个事务在此之前所 “看到” 的数据就是一笔脏数据。 **(脏读又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读。 )**
319319

320320
**例子:**
321321

@@ -398,7 +398,7 @@ select salary from employee empId ="Mary";
398398
**例子:**
399399

400400
目前工资为1000的员工有10人。
401-
(1)事务1,读取所有工资为 1000 的员工(共读取 10 条记录 
401+
(1)事务1,读取所有工资为 1000 的员工(共读取 10 条记录
402402

403403
```sql
404404
con1 = getConnection();

notes/SQL.md

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
# SQL基础
2+
3+
## 1. INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN
4+
5+
SQL 中的连接查询有四种方式,它们之间其实并没有太大区别,仅仅是查询出来的结果有所不同。
6+
7+
- inner join(内连接)
8+
- left join(左连接)
9+
- right join(右连接)
10+
- full join(全连接)
11+
12+
例如我们有两张表:
13+
14+
![20150603222647340](assets/20150603222647340-2.png)
15+
16+
**Orders** 表通过外键 **Id_P****Persons** 表进行关联。
17+
18+
### 1. inner join,在两张表进行连接查询时,只保留两张表中完全匹配的结果集。
19+
20+
我们使用 inner join 对两张表进行连接查询,sql如下:
21+
22+
```mysql
23+
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
24+
FROM Persons
25+
INNER JOIN Orders
26+
ON Persons.Id_P=Orders.Id_P
27+
ORDER BY Persons.LastName
28+
```
29+
30+
查询结果集:
31+
32+
![20150603222827804](assets/20150603222827804.png)
33+
34+
此种连接方式 Orders 表中 Id_P 字段在 Persons 表中找不到匹配的,则不会列出来。
35+
36+
37+
38+
### 2. left join,在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录
39+
40+
我们使用 left join 对两张表进行连接查询,sql如下:
41+
42+
```mysql
43+
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
44+
FROM Persons
45+
LEFT JOIN Orders
46+
ON Persons.Id_P=Orders.Id_P
47+
ORDER BY Persons.LastName
48+
```
49+
查询结果如下:
50+
51+
![20150603223638605](assets/20150603223638605.png)
52+
53+
可以看到,左表(Persons表)中 LastName 为 Bush 的行的 Id_P 字段在右表(Orders表)中没有匹配,但查询结果仍然保留该行。
54+
55+
56+
57+
### 3. right join,在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录
58+
59+
我们使用right join对两张表进行连接查询,sql如下:
60+
61+
```mysql
62+
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
63+
FROM Persons
64+
RIGHT JOIN Orders
65+
ON Persons.Id_P=Orders.Id_P
66+
ORDER BY Persons.LastName
67+
```
68+
69+
查询结果如下:
70+
71+
![20150603224352995](assets/20150603224352995.png)
72+
73+
Orders 表中最后一条记录 Id_P 字段值为 65,在左表中没有记录与之匹配,但依然保留。
74+
75+
### 4. full join,在两张表进行连接查询时,返回左表和右表中所有没有匹配的行
76+
77+
我们使用 full join 对两张表进行连接查询,sql如下:
78+
79+
```mysql
80+
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
81+
FROM Persons
82+
FULL JOIN Orders
83+
ON Persons.Id_P=Orders.Id_P
84+
ORDER BY Persons.LastName
85+
```
86+
87+
查询结果如下:
88+
89+
![20150603224604636](assets/20150603224604636.png)
90+
91+
查询结果是 left join 和 right join 的并集。
92+
93+
这些连接查询的区别也仅此而已。
94+
95+
96+
97+
参考来源:
98+
99+
- [SQL中INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN区别 - 杨浪 - 博客园](https://www.cnblogs.com/yanglang/p/8780722.html)
100+
101+
102+
13 KB
Loading

notes/assets/20150603222647340.png

10.8 KB
Loading

notes/assets/20150603222827804.png

5.05 KB
Loading

notes/assets/20150603223638605.png

5.75 KB
Loading

notes/assets/20150603224352995.png

5.55 KB
Loading

notes/assets/20150603224604636.png

6.26 KB
Loading

notes/project/README.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,35 @@
22

33
## 一、项目技术点深挖
44

5-
- [ ] 单点登录
5+
- [x] 单点登录
6+
7+
共享Redis会话服务器
68

79
- [ ] 扫码登录
10+
11+
token
12+
813
- [ ] 接口验证,涉及到 RESTful API 和 HTTP、HTTPS 相关
14+
915
- [ ] 接口验证,这里涉及到网络安全,别拦截了怎么处理,如二次 token 等怎么做,需要深入
16+
17+
当用户登录成功后,返回一个由Token签名生成的秘钥信息(Token可使用base64编码和md5加密,可以放在请求的Header中),然后对每次后续请求进行Token的封装生成,服务器端在验证是否一致来判断请求是否通过。
18+
19+
(1)常规的方法:用户登陆后生成token,返回客户端,然后服务器使用AOP拦截controller方法,校验token的有效性,每次token是一样的;
20+
21+
(2)用户登陆后生成临时token,存到服务器,并返回客户端,客户端下次请求时把此token传到服务器,验证token是否有效,有效就登陆成功,并生成新的token返回给客户端,让客户端在下一次请求的时候再传回进行判断,如此重复。 这种方法有性能问题,但也有一个漏洞,如果用户在一次请求后,还未进行下一次请求就已被黑客拦截到登录信息并进行假冒登录,他一样可以登录成功并使用户强制下线,但这种方法已大大减少被假冒登录的机会。
22+
23+
(3)两层token:一般第一次用账号密码登录服务器会返回两个token,时效长短不一样,短的时效过了之后,发送时效长的token重新获取一个短时效,如果都过期,那么就需要重新登录了。当然更复杂你还可以做三层token,按照业务分不同token。
24+
1025
- [ ] 数据库同步,线程池工作原理和设计思想,ETL
1126
- [ ] 分布式高可用,水平拆分,垂直拆分。设计到数据一致性得问题
1227
- [ ] 数据库分库分表,主从复制,Redis数据库缓存
1328
- [ ] 消息队列(发布订阅),消息通信(RESTful)。可能会涉及到 Kafka、RabbitMQ
1429
- [ ] Redis 集群部署,Master-slave 和 哨兵模式
1530
- [ ] MySQL 数据库定时备份,这个怎么做的
1631

32+
mysqldump
33+
1734

1835

1936
## 二、后台核心知识点扫盲

0 commit comments

Comments
 (0)