1. 事务
事务的基本语法
开启事务:start transaction;
提交事务:commit;
回滚事务:rollback;
设置回滚点:savepoint 回滚点名称;
回滚至指定的回滚点:rollback to 指定回滚点名称;
事务的原理
事务开启之后,所有的操作都会临时保存在事务日志中,只有通过commit命令才能够将数据永久保存在数据表中,其他情况都会清空;临时事务日志(rollback、断电、断开连接)。
自动事务的处理:在MySQL中,默认的都是自动事务处理,用户操作完就会立即同步到数据表中,系统通过autocommit变量进行控制。
mysql> SHOW VARIABLES LIKE '%autocommit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)
mysql> -- 关闭事务自动提交
mysql> set autocommit = 0;
Query OK, 0 rows affected <0.00 sec>
事务的四大特性ACID
A:atomic原子性:事务的整个操作是一个整体,不可分割,要么全部成功,要么全部失败。
C:consistency一致性:事务操作的前后数据表中的数据没有变化。
I:isolation隔离性:事务的操作是相互隔离的,不受影响。
D:durability持久性:事务一旦提交,数据表中的数据将会永久改变。
注:锁的机制:innodb默认是行锁,如果在事务的操作过程中,没有使用索引,系统会自动全表进行检索,自动升级为表锁。
1、行锁:只有当前行被锁住,其他用户不能操作。
2、表锁:整张表被锁住,其他用户不能操作。
2.变量
查看所有系统变量
mysql> SHOW VARIABLES;
查看系统变量的值
mysql> select @@version,@@autocommit,@@character_set_results;
+-----------+--------------+-------------------------+
| @@version | @@autocommit | @@character_set_results |
+-----------+--------------+-------------------------+
| 5.6.44 | 1 | utf8 |
+-----------+--------------+-------------------------+
1 row in set (0.00 sec)
mysql>
语法
修改系统变量的值:
- 会话级别,一次修改仅当前客户端有效:set 变量 = 值; 或 set @@变量 = 值;
- 全局级别,一次修改永久生效:set glotbal 变量 = 值;
自定义变量:
- set @变量名 := 值;
3. 触发器
触发器:trigger,事先为某一张表邦定好一段代码,当表中的某些内容发生改变的时候(增删改),系统会自动触发代码,执行
基本语法
-- 修改默认结束符
DELIMITER $$
CREATE
TRIGGER trigger_name BEFORE/AFTER INSERT/UPDATE/DELETE
ON `springtest`.`xh_mysqltest`
FOR EACH ROW
BEGIN
-- Trigger logic goes here....
END$$
DELIMITER ;
查看触发器
-- 查看所有触发器或模糊查询
show triggers [like 'pattern'];
-- 查看触发器创建语句
show create trigger trigger_name;
-- 删除触发器,不能修改
drop trigger trigger_name;
所有的触发器都会保存在一张表中,information_schema.TRIGGERS表中。
触发器没有提供一个能够阻止事件发生的能力,只能采取暴力报错
4.代码执行结构
IF结构
IF search_condition THEN
statement_list
[ELSEIF search_condition THEN]
statement_list ...
[ELSE
statement_list]
END IF
循环结构
[循环名:]
while 条件 do
-- SQL语句
-- iterate 循环名; -- 相当于continue;
-- leave 循环名; -- 相当于break;
end while;
5.函数
系统函数:MySQL中常用的系统函数
自定义函数:
-- 创建语法
Create function 函数名(参数列表) returns 返回值类型
begin
--函数体
--返回值:return 指定的数据类型
end
-- 调用函数
select 函数名([参数]);
-- 查看函数
show function status [like 'pattern']
-- 删除函数
drop function 函数名;
函数只能先删除后新增,不能修改,函数的作用域,全局变量可以在任何地方使用,局部变量只能在函数内部使用
全局变量使用set关键字定义,使用@进行标志
局不变量,使用declare关键字定义,没有@符号,所有的局部变量声明必须在函数体开始之前
存储过程
存储过程是一种处理数据的方式,没有返回值
创建存储过程
-- 创建存储过程
CREATE PROCEDURE proc_name ([proc_parameter])
begin
-- procedure body ...
end
-- 查看所有过程
show procedure status [like 'pattern'];
-- 查看过程的创建语句
show create procedure proc_name;
-- 调用过程
call proc_name([params]);
--过程不能修改,只能删除之后,新增
drop procedure proc_name;
过程参数
in:数据只是从外部传入内部进行使用,值传递
out:只允许过程内部进行使用,不使用外部数据(引用传递:外部传入的数据会被清空之后才能进入内部),可以给外部进行使用
inout:外部可以在内部进行使用,内部修改也可以给外部使用,引用传递,只能传递变量