mysql(事务/视图)

事务特性

  1. 原子性(完整性,事务不可分割)
  2. 一致性(从一个状态=>另外一个一致性状态)
  3. 隔离性(事务之间互相不影响)
  4. 持久性(事务提交后,数据的改变是永久的)

事务实现

隐形事务

#默认每条单独语句都开启了事务
SELECT/UPDATE/INSERT/ DELECT  

 显示事务

步骤1:开启事务
set autocommit=0;
start transaction;可忽略
步骤2:编写事务中的sql语句(select,insert,update,delete)
语句1;
语句2;
...
步骤3:结束事务
commit;提交事务
rollback;回滚事务

MYSQL 事务处理主要有两种方法:

1、用 BEGIN, ROLLBACK, COMMIT来实现

  • BEGIN 开始一个事务
  • ROLLBACK 事务回滚
  • COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:

  • SET AUTOCOMMIT=0 禁止自动提交
  • SET AUTOCOMMIT=1 开启自动提交

delect和truncate在事务中区别 

delect可以被事务回滚,truncate无法在事务中回滚

事务隔离

并发事务处理

  • 脏读
  • 幻读
  • 不可重复读
    生命周期读取数据持久化数据示例
    脏读A事务读取,B事务COMMIT之前临时数据sql执行前内存中数据sql执行后数据

    15352625974682.png

    幻读A事务对AB交集处理,B事务COMMIT前操作交集,COMMIT之后也操作交集会被B事务操作影响

    15352627898696.png

    不可重复读A事务,同一sql多次读取结果不一致。读COMMIT前数据和COMMIT后的数据

    在这里插入图片描述

处理事务隔离

  1. 防止多个事务同时操作
  2. 类似多线程的同步锁

视图

视图语句本身增删改操作

视图添加

CREATE VIEW 视图名 AS 查询语句 

视图修改

ALTER VIEW 视图名 AS 查询语句 
CREATE OR REPLACE 视图名 AS 查询语句 

视图删除

DROP 视图1,视图2..

视图与表区别

 针对视图生成虚拟表的增删改操作(不推荐)

用法是否占用物理空间使用
create table增删改查
视图 create view一般只用于查

变量

作用域定义和使用地方语法示例关键字
会话变量当前会话会话中任何地方必须@符号

SET @a=1

SET @b=2

@sum=@a+@b

DECLARE 定义变量
用户变量BEGIN ...END之间只能在BEGIN.END之间,且只能为第一句话一般不用@符号
begin


DECLARE a INT DEFAULT 1;


DECLARE b INT DEFAULT 2;


DECLARE SUM INT


SET SUM = a+b


end

SET 设置变量

存储过程

#删除存储过程
DROP PROCEDURE sp1;
#创建存储过程-更新存储(ALTER)过程只针对修改特征
CREATE PROCEDURE sp1 () BEGIN
	INSERT INTO dep2 ( `ID`, `NAME`, age )
	VALUES
		( 1, '张三', 10 ),
		( 2, '张三2', 10 ),
		( 3, '张三33', 10 ),
		( 4, '张三4', 10 ),
		( 5, '里斯3', 18 );
END ;
#调用存储过程
CALL sp1();

登陆过程示例

DROP PROCEDURE login;
CREATE PROCEDURE login (
	IN userName VARCHAR ( 20 ),
	IN psd VARCHAR ( 20 )) BEGIN
    #定义变量
	DECLARE
		num INT DEFAULT 0 ;
    #对变量赋值
	SELECT
		COUNT(*) INTO num
	FROM
		manger 
	WHERE
		userName = manger.`NAME` 
		AND psd = manger.`password`;
	SELECT 
	IF
		( num = 0, "密码错误", "登陆成功" );
	
END;
CALL login ( '张三', 123 );
CALL login ( '张三', 1323 );

自定义函数

// 创建格式
CREATE FUNCTION 函数名(形参) RETURNS 数据类型
BEGIN
    函数体
    RETURN 结果
END;

//示例
DELIMITER $$
DROP FUNCTION IF EXISTS genPerson$$
CREATE FUNCTION genPerson(name varchar(20)) RETURNS varchar(50)
BEGIN
  DECLARE str VARCHAR(50) DEFAULT '';
  SET @tableName=name;
  SET str=CONCAT('create table ', @tableName,'(id int, name varchar(20));');
  return str;
END $$
//执行函数
SELECT genPerson(实参) AS 函数列名

函数头为RETURNS函数体中为RETURN,单复数区别。同理其他也可能

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值