Java EE day05学习总结

今天主要学习数据的存储过程和事务

思维导图:

一.存储过程

1.什么是存储过程?

所谓的存储过程就是一组SQL组成的逻辑语句,这个存储你可以理解为一个对象体,这个过程会持久的保存在我们数据库的服务器端,效率非常高。

2.存储过程的特点:

(1)存储过程是保存在我们的服务器端,我们只要通过客户端一次调用语句,就可以执行服务器端事先准备好的SQL语句,所有的过程是服务器端一次性完成,所以下效率非常高

(2)存储过程跟我们之前编写的SQL语句不一样,当创建语句部分依赖的DDL语言。

3.存储过程的移植性的非常差(几乎无法移植)

创建无参存储过程

CREATE PROCEDURE 函数名(参数列表)

BEGIN

    -- 写上存储过程需要执行的SQL或者代码

END

---

CREATE PROCEDURE test()

BEGIN

    SELECT * FROM emp WHERE;

END

4.存储过程的参数类别

(1)输出参数:OUT
(2) Mysql的三大变量

<1>全局变量,也被称之为MYSQL的默认变量,属于配置级变量,这个变量一旦设定好,只有在你的Mysql完全停止服务的时候才会失效

character_set_client:mysql能够从客户端接收什么样的字符集编码

character_set_results:服务端返回给客户端的字符集编码

* 如何查看全局变量?

 ```

    SELECT @@变量名;

    SELECT @@character_set_client;

   ```

* 修改(定义)全局变量:

  ``` 

    SET @@变量名 = 值;

    SET @@character_set_client = 'gbk';   

    ```

<2>会话变量,只在一次连接会话中有效,会话关闭则变量失效。

如何查看会话变量?

SELECT @变量名;

SELECT @character_set_client;

<3>修改(定义)会话变量:

SET @变量名 = 值;

SET @character_set_client = 'gbk';   

<4>局部变量,只在一次存储过程当中有效,外界无法使用,存储过程完毕,局部变量失效。

如何查看局部变量?

SELECT 变量名;

SELECT character_set_client;

<5>修改(定义)局部变量:

SET 变量名 = 值;

SET character_set_client = 'gbk';   

<6>定义局部变量:

declare 变量名  数据类型

二.事务

1.什么事务?

在我们的实际开发当中,很多的业务的操作,往往不单单只是一条SQL可以完成的,必须要两条甚至多条SQL才能完成一个业务。比如转账,一个用户表,两个用户,A用户给B用户进行转账1000,则A用户的余额的要进行-1000,而B用户的余额+1000。那么这种操作其实最少需要两条SQL,如果说在两个SQL之间产生了异常,那么就会操作A用户的余额已经减少,而B用户的余额没有变化,这么种情况就需要依靠事务进行处理,要么同时成功、要么同时失败,中间连续不可中断。

2.如何操作事务?

(1)开启语句的事务:START TRANSACTION;

  (2)回滚语句的事务:ROLLBACK;

 (3)提交语句的事务:COMMIT;

3.Mysql的事务的提交方式

(1)自动提交(Mysql默认)

所有的代码执行完毕之后,不需要手动干预 自动提交

一条DML语句操作,其实一个事务的产生

(2)手动提交(Oracle默认)

每一个(DML)的代码操作,都需要自己手动处理

必须要处理COMMIT操作,代码才会成功

(3)修改Mysql的事务提交方式

查看当前配置的事务提交方式

SELECT @@autocommit;

修改事务的提交方式

SET @@autocommit = 0;(0手动提交/1自动提交)

4.事务的四大特征

(1)事务的原子性:事务的操作是一个不可分割的单位,从执行开始到结束,不允许任何的干扰中断,要么同时成功,要么同时失败

(2)事务的持久性:当我们的事务语句,不管是回滚还是提交,那么一旦操作之后,这个数据应该恒久不变,持续的。

(3)事务的隔离性:多个事务之间因为不同的隔离级别,所受到的影响是互相独立的。

(4)事务的一致性:你的事务操作之前的数据,和事务回滚或者提交之后是数据,数据的总量应该是保持一致的。

5.事务的隔离级别:

(1)什么是隔离级别?

多个事务的操作,每一个事务之间都是独立运作的。但是如果多个事务是操作同一个(批)数据的时候,会引发一堆的隔离的问题

<1>脏读:,当多个事务,操作同一个数据的时候,A事务可能读到了B事务没有提交数据。

<2> 虚读(不可重复读):在同一个事务当中,两次读取到的数据是不一致的。

<3> 幻读:(Mysql不存在这个问题)

(2)什么是隔离级别

<1>READ UNCOMMITTED:未读提交

这个级别产生的问题:脏读、虚读、幻读问题

<2>READ COMMITTED:读以提交(Oracle默认)

这个级别产生的问题:虚读、幻读问题

<3>REPEATABLE READ:可重复读(Mysql默认)

这个级别产生的问题:幻读问题

<4>SERIALIZABLE:串行化

可以解决所有问题

注意:隔离级别从小到大,安全性也是从小到大,但是效率是从大到小。

6.设置Mysql的隔离级别:

(1)数据库查询隔离级别:

Linux:select @@transaction_isolation;

Windows: select@@tx_isolation; 

(2)数据库设置隔离级别:
SET GLOBAL TRANSACTION ISOLATION LEVEL READ '隔离隔离名';

 

发布了29 篇原创文章 · 获赞 7 · 访问量 3182

猜你喜欢

转载自blog.csdn.net/weixin_45406656/article/details/104086204
今日推荐