网站建设资讯

NEWS

网站建设资讯

怎么配置mysql事务 mysql设置事务

如何开启mysql的事务支持

看你是什么事务,jdbc事务,还是分布式事务,还是容器事务

成都创新互联公司是专业的古交网站建设公司,古交接单;提供成都做网站、成都网站设计、成都外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行古交网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

1,编程式事务管理(jdbc的事务是绑定在connection上的)

Connection conn = null;

try

{

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:oracle:thin:@host:1521:SID","username","password");

conn.setAutoCommit(false); //取消自动提交

PreparedStatement ps = conn.prepareCall("update something");

ResultSet rs = ps.executeQuery();

conn.commit(); //手动提交

}

catch (Exception e)

{

conn.rollback();

e.printStackTrace();

}

finally

{

conn.close();

}

2,声明式事务

先在工程的application.xml配置文件中添加如下代码,开启事务

!-- 声明式事务控制配置 --

tx:annotation-driven transaction-manager="txManager"/

bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"

property name="datasource" ref="bassDataSource"/property

/bean

然后在你需要开启事务的接口前面添加注解

@Transactional(rollbackFor = IOException.class)

public void add(String name) throws IOException

{

System.out.println("可以再类里和方法里面添加事务注解0~0");

throw new IOException();

}

直接调用接口方法就好

分布式事务处理(mysql貌似在5.X之后才支持) 的话,

1.可以直接使用spring+atomikos框架进行管理

参考:

就不贴测试代码了,自己看着配置吧

2,使用JTA(Java Transaction API)进行分布式事务管理(测试代码如下)

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import javax.naming.InitialContext;

import javax.sql.DataSource;

import javax.transaction.SystemException;

import javax.transaction.UserTransaction;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

//分布式事务处理

public class transferAccount

{

@SuppressWarnings("null")

public void testTransferAccount()

{

UserTransaction userts = null;

Connection connA = null;

PreparedStatement psA = null;

InitialContext context = null;

Connection connB = null;

PreparedStatement psB = null;

try

{

//获得事务管理对象

userts = (UserTransaction) context.lookup("java:comp/UserTransaction");

//获取两个数据库

connA = getDataSourceA().getConnection();

connB = getDataSourceB().getConnection();

//开启事务

userts.begin();

//sql语句

psA = connA.prepareStatement("我加1");

psB = connB.prepareStatement("我减1");

//执行sql

psA.executeUpdate();

psB.executeUpdate();

//事务提交

userts.commit();

} catch (Exception e)

{

try

{

userts.rollback();

} catch (IllegalStateException | SecurityException

| SystemException e1)

{

e1.printStackTrace();

}

e.printStackTrace();

}

finally

{

try

{

psA.close();

psB.close();

connA.close();

connB.close();

} catch (SQLException e)

{

e.printStackTrace();

}

}

}

public DataSource getDataSourceA()

{

MysqlDataSource dataSource = new MysqlDataSource();

dataSource.setDatabaseName("mysql");

dataSource.setServerName("server");

dataSource.setPortNumber(1433);

dataSource.setUser("test");

dataSource.setPassword("test");

return dataSource;

}

public DataSource getDataSourceB()

{

MysqlDataSource dataSource = new MysqlDataSource();

dataSource.setDatabaseName("mysql");

dataSource.setServerName("server");

dataSource.setPortNumber(1435);

dataSource.setUser("test1");

dataSource.setPassword("test1");

return dataSource;

}

}

mysql 存储过程怎么设置事务

CREATE DEFINER=`root`@`localhost` PROCEDURE `createBusiness`(parameter1 int)

BEGIN

#Routine body goes here...

DECLARE flag int DEFAULT parameter1;#声明变量flag,将参数值赋给该变量

DECLARE uuidStr VARCHAR(32);#声明一个长度为32位的字符串

DECLARE currentTime TIMESTAMP;#声明一个类型为时间戳的变量

declare err INT default 0;#声明一个整形变量err,默认值是0

declare continue handler for sqlexception set err=1;#当sqlexception handler捕捉到异常时,设置err=1

START TRANSACTION;#开始事务

WHILE flag0 DO #注意: while不能空实现(在while块中,里面必须有语句)

#uuid()函数得到的字符串是'6ccd780c-baba-1026-9564-0040f4311e29',剔除里面的-,得到一个32位的字符串

SET uuidStr = REPLACE(UUID(),'-','') ;

#得到当前的时间

SET currentTime = CURRENT_TIMESTAMP();

#执行插入语句,注意连接字符串的函数concat(str1,str2,...);其中str..也可以是数字类型

INSERT INTO

表名称

(id,title,keyword,hasImage,isTodayHead,isShowInHome,isBigness,publishTime,originId,modify_time,isAnalysis)

VALUE

(uuidStr,CONCAT('事件标题',flag),CONCAT('关键字',flag),1,1,0,0,currentTime,CONCAT('xxxxxxx',flag),currentTime,1);

#每循环一次,flag要减去1,注意没有flag--的语法

set flag = flag-1;

#在这里测试当err=1时,事务是否有了回滚,测试ok

#IF flag=7 THEN #注意在procedure中给变量赋值要用到set,或在变量声明时用default来父子,所以=号可以用来比较两边的值是否相等,=也可,区别先不去纠结。

#set err=1;

#END if;

END WHILE;

IF (err=0) THEN

commit;

select 'OK';

ELSE

rollback;

select 'err';

END IF;

END;

Mysql数据库中,事务是指什么?如何使用该功能?

什么是事务? \x0d\x0a\x0d\x0a事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务 \x0d\x0a\x0d\x0a注意:mysql数据支持事务,但是要求必须是innoDB存储引擎 \x0d\x0a\x0d\x0a解决这个问题: \x0d\x0a\x0d\x0amysql的事务解决这个问题,因为mysql的事务特性,要求这组操作,要不全都成功,要不全都失败,这样就避免了某个操作成功某个操作失败。利于数据的安全 \x0d\x0a\x0d\x0a如何使用: \x0d\x0a\x0d\x0a(1)在执行sql语句之前,我们要开启事务 start transaction; \x0d\x0a\x0d\x0a(2)正常执行我们的sql语句 \x0d\x0a\x0d\x0a(3)当sql语句执行完毕,存在两种情况: \x0d\x0a\x0d\x0a1,全都成功,我们要将sql语句对数据库造成的影响提交到数据库中,committ \x0d\x0a\x0d\x0a2,某些sql语句失败,我们执行rollback(回滚),将对数据库操作赶紧撤销 \x0d\x0a\x0d\x0a(注意:mysql数据支持事务,但是要求必须是innoDB存储引擎) \x0d\x0amysql create table bank(name varchar(20),money decimal(5,1))engine=innodb defau \x0d\x0alt charset=utf8; \x0d\x0a\x0d\x0amysql inset into bank values('shaotuo',1000),('laohu',5000); \x0d\x0a\x0d\x0amysql select*from bank; \x0d\x0a+---------+--------+ \x0d\x0a| name | money | \x0d\x0a+---------+--------+ \x0d\x0a| shaotuo | 1000.0 | \x0d\x0a| laohu | 5000.0 | \x0d\x0a+---------+--------+ \x0d\x0a\x0d\x0a------没有成功“回滚”执行rollback \x0d\x0amysql start transaction; //开启事务 \x0d\x0aQuery OK, 0 rows affected (0.00 sec) \x0d\x0a\x0d\x0amysql update bank set money=money+500 where name='shaotuo'; \x0d\x0aQuery OK, 1 row affected (0.00 sec) \x0d\x0aRows matched: 1 Changed: 1 Warnings: 0 \x0d\x0a\x0d\x0amysql update bank set moey=money-500 where name='laohu'; \x0d\x0aERROR 1054 (42S22): Unknown column 'moey' in 'field list' \x0d\x0amysql rollback; //只要有一个不成功,执行rollback操作 \x0d\x0aQuery OK, 0 rows affected (0.01 sec) \x0d\x0a\x0d\x0amysql select*from bank; \x0d\x0a+---------+--------+ \x0d\x0a| name | money | \x0d\x0a+---------+--------+ \x0d\x0a| shaotuo | 1000.0 | \x0d\x0a| laohu | 5000.0 | \x0d\x0a+---------+--------+ \x0d\x0a------成功之后 进行commit操作 \x0d\x0amysql start transaction; //开启事务 \x0d\x0aQuery OK, 0 rows affected (0.00 sec) \x0d\x0a\x0d\x0amysql update bank set money=money+500 where name='shaotuo'; \x0d\x0aQuery OK, 1 row affected (0.01 sec) \x0d\x0aRows matched: 1 Changed: 1 Warnings: 0 \x0d\x0a\x0d\x0amysql update bank set money=money-500 where name='laohu'; \x0d\x0aQuery OK, 1 row affected (0.00 sec) \x0d\x0aRows matched: 1 Changed: 1 Warnings: 0 \x0d\x0a\x0d\x0amysql commit; //两个都成功后执行commit(只要不执行commit,sql语句不会对真实的数据库造成影响) \x0d\x0aQuery OK, 0 rows affected (0.05 sec) \x0d\x0a\x0d\x0amysql select*from bank; \x0d\x0a+---------+--------+ \x0d\x0a| name | money | \x0d\x0a+---------+--------+ \x0d\x0a| shaotuo | 1500.0 | \x0d\x0a| laohu | 4500.0 | \x0d\x0a+---------+--------+

如何配置mysql支持事务

MYSQL--事务处理

事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。

比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!


当前文章:怎么配置mysql事务 mysql设置事务
当前地址:http://njwzjz.com/article/hjijje.html