[end_label]
7.2 调用存储过程和函数
7.2.1 调用存储过程
call proc_name([paramter[,...]])
7.2.2 调用存储过程
select fun_name([paramter[,...]])
7.3 查看存储过程和函数
- 使用show status 语句查看存储过程和函数的状态
show {procedure|function} status{like 'pattern'}
2. 使用show create 语句查看存储过程和函数的定义
show create {procedure|function} proc_name
3. 从information_schema.routine表中查看存储过程和函数的信息
select * from information_schema.routine where routine_name='proc_name'
7.4 修改存储过程和函数
alter {procedure|function} proc_name{characteries ... };
7.5 删除
drop procedure proc_name
drop function fun_name
触发器
能够激活触发器的SQL语句:insert、delete、update
创建触发器
- 创建一条执行语句的触发器
create trigger trigger_name before|after trigger_event on table_name for each row trigger_simt
trigger_event:触发执行条件,insert delete insert
trigger_simt:激活触发器后执行的SQL语句 - 创建多条执行语句的触发器
create trigger trigger_name before|after trigger_event on table_name for each row begin trigger_simit end
查看触发器
- 通过show triggers语句查看
show triggers \G
2. 通过查看系统表triggers实现查看
use information_schema
select * from triggers
删除触发器
drop trigger trigger_name
事务和锁
事务
- 特性:原子性(A)、一致性©、隔离性(I)、持久性(D)。
- redo日志:事务执行时需要将执行的事物日志写入redo日志文件里,在Mysql崩溃时会重新执行redo日志中的记录
- undo日志:主要用于事务异常时的数据回滚,即就是复制事务前的数据库内容到undo缓冲区,然后在合适的时间将内容刷新到磁盘。
控制语句
begin:开启事务
commit:结束事务
rollback:回滚事务
Mysql可通过set autocommit、start transaction、commit和rollback 支持本地事务
start transaction|begin|work|commit [work][and [no] chanin] [[no] release] rollback [work] [and [no] chain] [[no] release] set autocommit ={0|1}
隔离级别
A查B改
- 未提交读(read uncommitted) == 脏读:回滚后A查询两次的值不一样,A可以查看到B修改过程中的内容
- 提交读(read commited) == 不可重复读:提交后A可以查到B修改后的内容,查询的数据不一致
- 可重复读(repeatable read) Mysql默认== 幻读:提交后A查不到B修改的内容,各是各的,但是A更新B修改的内容是可以的,而且更新后又可以查到B修改的内容
- 可串行化(serializable):级别最高,可能出现大量超时和锁竞争
查看事务隔离级别:select @@global.tx_isolation
InnoDB锁机制
锁的类型
- 共享锁(S):粒度是行或者元组(多个行),获取该锁,可执行读操作
- 排他锁(X):粒度是行或者元组(多个行),获取该锁,可执写读操作
如果A有共享锁,则不可同时加排他锁,可同时加共享锁
如果A有排他锁,则不可同时加共享锁,也不可同时加共享锁
3. 意向锁:粒度是整张表
- 意向排他锁(IX)
- 意向共享锁(IS):有意对数据上共享锁和排他锁
锁之间要么相容要么相斥
锁粒度
- 表锁:开销小,允许并发量最小 - MyISAM
- 行锁:允许并发量最大,- InnoDB
eg:select ... lock in share mode
``select … for update