mvc 怎么执行mysql里的存储过程

mvc 怎么执行mysql里的存储过程,第1张

比方说你创建存储过程的语句如下:

create procedure test_proc(count int)

那么执行存储过程的语句就是:

call test_proc(500)

先来总体说一下我对这个问题的理解,用一句话概括:

数据库是可以控制事务的传播和隔离级别的,Spring在之上又进一步进行了封装,可以在不同的项目、不同的 *** 作中再次对事务的传播行为和隔离级别进行策略控制。

注意:Spring不仅可以控制事务传播行为(PROPAGATION_REQUIRED等),还可以控制事务隔离级别(ISOLATION_READ_UNCOMMITTED等)。

(以下是个人理解,如果有瑕疵请及时指正)

下面我具体解释一下:

为了大家能够更好的理解,先来明确几个知识点:

事务的传播行为:简单来说就是事务是手动提交还是自动提交,事务什么时候开始,什么时候提交。

事务的隔离级别:简单来说,就四个,提交读,提交读,重复读,序列化读。

首先我来描述一下,数据库(mysql)层面上对于事务传播行为和隔离级别的配置和实验方法:

数据库层面(采用命令行):其实mySql命令行很简单,希望实验 *** 作一下:

//连接数据库,我这里是本地,后面是用户名密码,不要打分号,如果指令不行,配置下环境变量,网上有很多。

1. cmd中执行:mysql -hlocalhost -uroot -pmysql

//查看本地数据库事务传播行为是手动提交(0),还是自动提交(1)。

2.select @@autocommit

//如果是0,希望设置为手动提交,这里其实是设置本对话的autocommit,因为如果你再开一个cmd,发现还是没改回来,如果想修改全局的,网上有global方法。

3.set @@autocommit=0

//然后查询本地数据库中的一条记录,我本地数据库为test1

4.use test1

5.select * from task where taskid=1

//同时新开一个窗口cmd,连接数据库,并且修改这条记录,update语句我就不写了,或者直接修改数据库本条记录。

//再次执行select * from task where taskid=1发现值没变。OK因为此时数据库隔离级别为repeatable read 重复读,因为mysql默认的隔离级别是重复读。

//修改数据库隔离级别

6.set global transaction isolation level read committed

//查看一下,可能需要重新连接一下

7.select @@tx_isolation

//这时在执行一下4,5 *** 作,发现值变了,ok。因为已经改变了数据库隔离级别,发生了重复读出不同数据的现象。

(以上 *** 作希望有不明白的上网自学一下,很有用,先把数据库隔离级别弄明白了)

然后再来讲一下,Spring对事务传播行为和隔离级别的二次封装。

因为不同项目可能在一个mysql的不同数据库上,所以可以在项目中配置数据库的传播行为和隔离级别:

关于spring的传播行为(PROPAGATION_REQUIRED、PROPAGATION_REQUIRED等),我《数据库隔离级别(mysql+Spring)与性能分析 》文章中有讲,网上也有很多相关资料,我就不说了。

关于spring的事务隔离级别与数据库的一样,也是那四个,多了一个default,我也不仔细讲了。

下面主要讲一下spring的配置方法:

<property name="transactionAttributes">

<props>

<prop key="save*">PROPAGATION_REQUIRED</prop>

<prop key="update*">PROPAGATION_REQUIRED</prop>

<prop key="delete*">PROPAGATION_REQUIRED</prop>

<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>

<prop key="find*">PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED</prop>

</props>

就以find为例,可以配置这么配置,前面是控制传播行为,后面是控制事务隔离级别的。那么这时哪怕数据库层面上是重复读,但是还是以这里为准,你会发现在同一个事务中两次查询的结果是不一样的。

最后扫除一个盲区,readonly这个属性,是放在传播行为中的,一般书都这么归类,我也尝试了一下,readonly并不能影响数据库隔离级别,只是配置之后,不允许在事务中对数据库进行修改 *** 作,仅此而已。

一、php配置MySQL

1、将php安装目录下的php_mysql.dll和MySQL安装目录下的libmysql.dll文件拷贝至c:/windows/system32中;

2、配置php.ini

extension=php_gd2.dll

extension=php_mbstring.dll

extension=php_mysql.dll

extension=php_mysqli.dll

把上面四个。dll的最前面的;去掉

二、php表单提交至数据库的实现过程

1、login.php页面

<SPAN style="FONT-SIZE: 14px"><html>

<FORM method=post action=add.php>

Name: <INPUT name=username><BR>

Email: <INPUT name=email><BR>

<INPUT value=提交 type=submit name=submit>

</FORM>

</SPAN>

2、add.php页面

<SPAN style="FONT-SIZE: 14px"><?php

include("conn.php");

?>

<?php

if(isset($_POST["submit"]))

{

$sql = "insert into users(username, email) values('$_POST[username]', '$_POST[email]')"

mysqli_query($conn, $sql);

echo "添加成功"

}

?></SPAN>

3、conn.php页面

<SPAN style="FONT-SIZE: 14px"><?php

$conn = new mysqli("localhost", "root", "159357");

$conn->select_db("db_test");

//mysql_query("set name 'gb2312'");

$conn->set_charset("utf8");

?></SPAN>


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7472382.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-06
下一篇2023-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存