SQL & 数据库agent

SQL基础

1.搜索

1
SELECT *(任意) FROM "表格名称";
1
2
3
4
SELECT 姓名
FROM 班级
Limit 5 //搜索几条
OFFSET 10;//便宜数目
1
2
3
4
SELECT 姓名
FROM Students
WHERE 班级 = 高一二班 (<>不等于)
ORDER BY 班级,成绩 INSC/DESC(升序、降序);

模糊搜索

1
2
3
4
SELECT 姓名
FROM students
WHERE 姓名 LIKE ‘姚%’;
区别于姚_,百分号可以代表其他字符以及词组,而_智能代表一个字符,所以只能匹配两个字的人

大小搜索

1
2
3
SELECT 姓名
FROM table
WHERE 成绩 >= 60;

多条件搜索

1
2
3
SELECT 姓名
FROM 表格
WHERE 成绩 > 60 AND 班级 = '高一二班';
1
2
3
SELECT 姓名
FROM 表格
WHERE 成绩 BETWEEN 80 AND 90 AND 班级 = ‘高一二班’ OR 班级 = ‘高一三班’;

and 优先于高于or,所以上面代码有问题,必须在后面加括号

函数使用

1
2
SELECT AVG(成绩),SUM(成绩),MAX(成绩),MIN(成绩),COUNT(成绩)
FROM 表格

分组搜索,比如班级平均分

1
2
3
SELECT AVG(成绩)
FROM 表格
GROUP BY 班级;

搜索数量

1
2
SELECT COUNT(DISTINCT 科目) //搜索不重复的科目的数量 distinct 表示不重复
FROM students;

2.建立表格

1
2
3
4
CREATE TABLE 学生(
学号 INT PRIMARY KEY
姓名 String
);

primary key

增加内容

1
2
INSERT INTI 学生 (学号,姓名)
VALUES1111, ‘哈吉米’),(1112'哈基汪');

改动内容

1
2
3
UPDATE 学生
SET 学号 = 1110
WHERE 姓名 = ‘哈吉米’;//给哈吉米改学号

删除内容

1
2
3
DELETE 
FROM 学生
WHERE 学号 = 1110;

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相同的数据版本,避免幻读加锁

串行化

串行化:事务无法并发执行,性能很差

【实现】:加锁,只有得到锁事务才可以执行