mysql属于有这些功能但不是强项和分区一样不是特别推荐用
dba不是来写存储过程的 dba主要是是保证性能高可用
更高层面是架构
存储过程:一组sql语句在客户端存储待client调用
把这些全封装在数据库里增加了数据库的开销
也可以对一组业务逻辑进行封装
游戏 通过更新存储过程 积分加倍或者不加倍
类型:
1.定义一组sql语句返还结果
2.UDF用户自定义函数 user defined function 函数返回一些标量(不能修改的值)
mysql一个sql只能使用一个cpu
sql有没有编译缓存计划? 没有
一组sql在mysql server端运行只在一个核上运行同时没有编译缓存计划那么节省的是什么??
节省是client端向server端传输的网络io 但这个io通常不是我们的瓶颈
唯一我觉得的优点是可以把业务逻辑封装到数据库上
在数据库上通过sql达到业务逻辑的变更
感觉灵活一些
所以建议不要用存储过程 cpu会跑到很高
数据库删除也会删除相应存储过程
存储过程是在表里寸的 而且这个表是mysaim的 很操蛋
mysql调存储过程满慢因为缓存不住 其实缓存住 直接在内存拿就好了 这是设计缺陷 后期版本可能会改善 5.7可能会有大的改善
delimiter下面定义一个batch sql
create procedure 存储过程名字 括号里可存参数
调用后返回相应3个结果
区别是存储函数有一个return 要把结果return回来
declare申明的变量是存储过程中的local变量 只在存储过程中有(in可有可无)
declare上面少了个begin
使用session变量容易造成结果是乱的慎用出结果特别难查
历史遗留产物
调试过程中可以这样看看是哪一步出错了
declare “关键词”cursor for "SQL语句"
重点
5.6 一个触发器的名字指定定义一个触发器
5.7这点做了改善 一个触发器可以定义多个
高并发环境不允许使用触发器
核心业务里面禁掉不允许
高写入的情况下很耗资源毕竟是多了一些多的操作
我们现在考虑都是支持事物的表
级联外键所导致的更改
从库上触发器有可能不起作用
event再从库上也会被disable掉
5.1以后才在mysql 引入
应用过程中各种操蛋
打开之后可以通过show processlist;看到多了一个进程
再高可用里切来切去容易造成event丢失
尽可能不用 用定时任务来取代
坑:主从库切换之后 从库上的event是不会运行的
提升为主库也不会运行
需要把slave side去掉 然后out 一下inable