事物
有单独单元的一个或多个sql语句组成,在这个单元中,每个sql语句相互依赖,要么全部执行,要么全部回滚。
ACID
- 原子性 不可在分割
- 一致性 必须使一个一致性状态变换到另外一个一致性状态
- 隔离性 一个事物的执行 不受其他事物干扰
- 持久性 事物一旦提交 永久性改变
隐式事物
没有明确开启和结束的标记
显式事物
具有明显的开启和结束的标记
步骤
set autocommit =0
start transaction
语句1
语句2
commit
rollback
事物隔离级别
READ UNCOMMITTED 读未提交的数据
READ COMMITED 读已提交的数据
REPEATABLE READ 可重复读
SERIALIZABLE 串行化
错误
- 脏读
- 不可重复读
- 幻读
设置节点 保存点 savepoint
set autocommit=0;
start transaction
delete from account where id=25;
savepoint a;
delete form account where id=28;
roolback to a;
语句
show engines
show varibles like 'autocommit’
set session transaction isolation level read uncommitted 设置当前连接
set global isolation level read uncommitted 全局
set name gbk
select @@tx_isolation 查看当前隔离级别
show variables like '%char%'
存储引擎
- innodb 支持事物
- myisam
- memory
视图
虚拟表 和普通表 通过表动态生成的数据 只保存了sql逻辑 不保存查询结果
create view v1
as
select stuname,majorname
form stuinfo s
inner join major m on s.majorid=m.id
select * v1from v1 where stuname like 'zhang%'
存储过程
一组预先编译好的sql语句集合
创建
create procedure name(var)
begin
过程体
end
参数列表包含三部分
参数模式 参数名 参数类型
参数模式
in
out
inout
调用
- 空参
create procedure myp1()
begin
insert into admin(username,password)
values (‘john’,1)
end
call myo1()
DELIMITER $
2. in
```sql
create procedure myp2(in beautyName varchar(20))
begin
select bo.*
from boys bo
right join beauty b on bo.id =b.boyfriend_id
where b.name=beautyName
End ;
- out
create procedure myp5(in beautyName varchar(30) ,out boyName varchar(30))
begin
select bo.boyName into boyName
from boys bo
inner join beauty b on bo.id=b.boyfriend_id
where b.name=beautyName;
End
set @bName
call myp5('小熊',@bName)
``