一 索引、事务、锁
- 索引:相当于书的目录
- 优点:查询速度快
- 缺点:占用存储空间大,维护和创建有成本,存储方式是树结构
- 索引使用:
create index myindex on table(name);//创建索引 名:myindex 表名:table 列名:name show index from table;//查询 table表所有创建的索引 drop index myindex on table;//删除 table表的myindex索引 explain select * from table where name = 'abc';//分析SQL语句是否使用索引
- 事务:一个最小的不可再分的工作单元
- 4大特征:原子性(A) 一致性(C) 隔离性(I) 持久性(D)
- 4隔离级别: 读未提交 读已提交 可重复读 串行化
- 事务使用:
start transaction;//开始事务 commit;//提交事务 rollback;//回滚事务
- 锁:多线程并发访问某一资源触发机制
- 乐观锁:先拿数据,再锁定. 乐观心态
- 悲观锁:先锁定,再拿数据. 悲观心态
- 共享锁 允许其他进行读取数据 不允许修改
- 排它锁 不允许对改数据任何操作 等待释放再解除
- 锁的粒度: 行锁 < 页锁 < 表锁 页锁最为常用
二 存储过程
- 存储过程:SQL的封装与重用
- 优点:安全,提高性能,降低程序与数据库的交流
- 缺点:开发维护成本高,耗内存,不易于调试
- 使用:
create procedure mypro(in a int,in b int,out sum int) begin set sum = a+b; end;call mypro(1,2,@s);-- 调用存储过程 select @s;-- 显示过程输出结果show create procedure mypro;drop procedure mypro;
- 流程控制语句 if 条件 case 条件 while 循环 repeat 循环 loop 循环
- if 条件
if num<0 then select '负'; elseif num=0 then select '都不是'; else select '正'; end if;
- case 条件
case when num<0 then select '负'; when num=0 then select '都不是'; else select '正'; end case;
- while 循环
while num<10 do set num = num+1; set sum = sum+num; end while;
- if 条件
三 视图和函数
- 视图:是一个虚拟表
- 优点:好用-把多张表封装成一个视图,安全-可以隐藏字段
- 缺点:性能差,不能对视图做修改操作
- 使用:
create view v1 as select name,age from student;show create view v1;drop view v1;
- 函数:类似于存储过程,将一些SQL封装一起执行
- 与存储过程区别
- 返回值不同:函数必须有返回值,且仅返回一个结果值;过程可以没有返回值,但是能返回结果集;
- 调用时的不同:函数使用 select 进行调用;过程使用 call 进行调用;
- 参数的不同:函数的参数都是 in 参数;过程可以传递 in\out\inout 参数
- 使用:
create function myfun(a int) returns int begin return a; end; select myfun(1);
- 与存储过程区别
四 触发器和游标
- 触发器:触发器是和表关联的特殊的存储过程
- 使用:
create trigger mytg after insert on orders for each row begin update product set num = num-3 where pid=1; end;drop trigger if exists mytg;
- 使用: