MySQL学习

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:外部可以在内部进行使用,内部修改也可以给外部使用,引用传递,只能传递变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值