SQL基础
1.搜索
1 | SELECT *(任意) FROM "表格名称"; |
1 | SELECT 姓名 |
1 | SELECT 姓名 |
模糊搜索
1 | SELECT 姓名 |
大小搜索
1 | SELECT 姓名 |
多条件搜索
1 | SELECT 姓名 |
1 | SELECT 姓名 |
and 优先于高于or,所以上面代码有问题,必须在后面加括号
函数使用
1 | SELECT AVG(成绩),SUM(成绩),MAX(成绩),MIN(成绩),COUNT(成绩) |
分组搜索,比如班级平均分
1 | SELECT AVG(成绩) |
搜索数量
1 | SELECT COUNT(DISTINCT 科目) //搜索不重复的科目的数量 distinct 表示不重复 |
2.建立表格
1 | CREATE TABLE 学生( |
primary key
增加内容
1 | INSERT INTI 学生 (学号,姓名) |
改动内容
1 | UPDATE 学生 |
删除内容
1 | DELETE |
3.删除表格
1 | DROP TABLE 学生; |
4.SQL 命令顺序
SELECT , FROM, WHERE, GROUP BY,HAVING , ORDER BY, LIMIT
事务
必须要成为一个执行单元的sql操作:比转转账的输出与接受方,必须有原子性操作
事务四大特性
1. 原子性
undo log回滚日志
2. 持久性
如果事务完成,但是磁盘还没写入数据就崩溃了,如何恢复
redo log事务实现之后把修改写入redo log, 磁盘数据未同步也能通过redo log 保存数据(崩溃恢复)
3.隔离性
事务A和事务B并发执行,一个事务读到了另一个事务还没执行的数据
MVCC+锁配合undo log 解决
4.一致性
两个人修改,但是总额不变,上述三个实现,一致性就实现了
事务并发
脏读:一个事务读取其他事务未提交的数据
不可重复读:同一个事务值两次读数值不一样(值)
幻读:同一个事务数据条数不一样(条数)
MVCC
多版本并发控制:执行select 自动形成read view , read view维护数据版本对事务的可见性,从而寻找到事务可见的数据版本
事务隔离级别
读未提交、读已提交、可重复读、串行化
读未提交
读已提交
读已提交:解决脏读,只能读已经提交的事务的数据
【MVCC】每次读取生成性的read view,每次都能读到最新数据版本,读已经提交的数据
可重复读
可重复读:第一次读生成快照,之后别的事务修改,这个事务也只处理快照内容数据
【MVCC】使用第一次read view相同的数据版本,避免幻读加锁
串行化
串行化:事务无法并发执行,性能很差
【实现】:加锁,只有得到锁事务才可以执行