数据库
关系型数据库
- 基于关系代数理论 缺点: 表结构不直观,实现复杂速,速度慢 优点: 健壮性高,社区庞大
Product
product_id | product_name | category_id | price |
---|---|---|---|
4 | toyota | 2 | 100000 |
3 | prosche | 2 | 1000000 |
2 | addidas | 2 | 500 |
1 | nike | 600 |
category
category_id | category_name |
---|---|
2 | automobile |
1 | shoes |
1select * from product join category; -- 结果为笛卡尔积 8条记录
2
3select * from product p join category c on p.category_id=c.category_id; -- 按照id相等去连接, 忽略id 为空的记录 内连接 null的数据不会显示
4
5
6select * from product p left join category c on p.category_id=c.category_id; -- 左外连接, 左边为主表
7
8
9select p.category_id,category_name ,count(1) as total from product p left join category c on p.category_id=c.category_id group by p.category_id; -- count 聚合函数
10
11select p.category_id,category_name ,MIN(price) as total from product p left join category c on p.category_id=c.category_id group by p.category_id; -- min 聚合函数
12
13
14select * from product p left join (
15 select p.category_id,category_name ,MIN(price) as min_price
16 from product p left join category c
17 on p.category_id=c.category_id group by p.category_id) as cat_min
18on p.category_id = cat_min.category_id
19where p.price = cat_min.min_price;
20/*
21 获取某个品类中价格最低的商品
22 */
事务
ACID
- Atomicity 原子性
- Consistency 一致性
- Isolation 独立性
- Durability 持久性
事务的隔离级别
- Read Uncommited
- Read Committed
- Repeatable Read
- Serializable
For Update
对查询的数加锁 ## 悲观锁
乐观锁
使用版本校验的方法保证事务的独立性
Sql的返回值是影响了多少行
- 读取数据,记录timestamp
- 修改数据
- 检查和提交数据
数据库例题
可以用来程序调优
- 改善数据访问方式以提高缓存命中率
- 使用数据库连接池替代直接的数据库访问
- 使用迭代来代替递归
- 合并多个远程调用批量发送
- 共享冗余数据提高访问效率(不可变对象)