触发器、事件、事务、函数
1.事务操作原理:事务开启之后Start transaction,所有的操作都会临时保存到事务日志。只有在得到commit才会关闭,否则清空;
2.设置回滚点: savepoint 回滚点名字; 回到回滚点: rollback to 回滚点名字;
3.事务特性:ACID A:原子性,要么成功,要么失败 C:一致性,只有commit时才会改变 I:隔离性,两个窗口操作互不影响 D:永久性,数据提交,不可改变;
3_2.锁机制: innodb默认是行锁, 但是如果在事务操作的过程中, 没有使用到索引,那么系统会自动全表检索数据, 自动升级为表锁
4.非id字段没有索引,搜索时会全表检索;形成表索;
4_2.会话级别: 临时修改, 当前客户端当次连接有效 Set 变量名 = 值;/Set @@变量名 = 值;全局级别: 一次修改,永久生效(对所有客户端都生效) Set global 变量名 = 值;
5.修改系统变量:set 变量 = 值;
6.设置自定义变量:set @变量名; 查看:select @变量名;
7.在mysql中 = 会被当做比较处理 所以赋值一般用:=
8.变量不区分数据库,跟着用户走;
9.触发器:事件类型(insert delete update),触发时间(before after),触发对象
10.触发器基本语法
-- 临时修改语句结束符
Delimiter 自定义符号: 后续代码中只有碰到自定义符号才算结束
Create trigger 触发器名字 触发时间 事件类型 on 表名 for each row
Begin -- 代表左大括号: 开始
-- 里面就是触发器的内容: 每行内容都必须使用语句结束符: 分号
End -- 代表右带括号: 结束
-- 语句结束符
自定义符号
-- 将临时修改修正过来
Delimiter ;
10_2.Old代表的是旧记录,new代表的是新记录
11.事件类型和触发事件不能一致 不然会死循环;
12.创建触发器:create trigger 触发器名字 触发时间
13.在mysql中只有if分支;if 条件 then 执行代码(如果不执行用end if结束)
14.自定义函数 create function 函数名 returns 。。。
15.像函数 触发器 表单 这种结构 即使退出,重新登录是还在;
16.创建函数只在当前数据库使用,不能跨库;
17.mysql的作用域与js的作用域一样;全局变量可以在任何地方使用,局部变量只能在函数内部使用;
18.mysql在调用函数的时候才会发现错误;
19.存储过程是一种没有返回值的函数;
20.过程没有返回值: select是不能访问的.要用call
21.set之后可以不用:=
22.procedure局部变量和全局变量无关;在调用结束之后,out和inout类型 系统会将局部变量的值重新返回给全局变量
23.关于procedure的in out inout
1.in的话就是可以给pro()赋值 或者外面定义变量@ 也可以 eg:pro(1);或者set @a=1 ;pro(@a);
2.out只能用外面定义变量@赋值给pro() 并且会 将变量@变成null
3.inout只能在外面定义变量@赋值给pro()但是变量@不变;
24.全局变量和局部变量互不影响;