mysql——数据库事务(C#代码)
来源:互联网 发布:php正则表达式 编辑:程序博客网 时间:2024/06/08 11:57
一、引言
MySQL事务主要用来处理数据量大、数据复杂度高的数据操作,最经典的使用场景是银行的转账:需要先从银行账户A中取出钱,然后再存入银行账户B中,如果中间出现问题,而没有事务的保证,那么就会出现B收不到钱,而A支出钱又回不到自己的账户的严重问题,那么有了事务机制,这个问题就解决了。
总之,事务是处理crid中cid三种操作,要不全执行要不全不执行==
二、基本概念
2.1 事务特点
1、A(Atomicity),即事务的原子性
一组事务操作,要么都成功,要么都撤回。
2、C(Consistency),即事务的稳定性
有非法数据操作,如:外键约束,事物撤回。
3、I(Isolation),即事务的隔离性
事务是独立运行的,一个事务的操作如果影响了另一个事物,那么另一个事务就会撤回执行,要做到事务100%的隔离,需要牺牲速度和性能。
4、D(Durability),即事务的可靠性
当数据库崩溃之后,InnoDB数据库表驱动会利用日志文件进行数据的重构修改,需要注意的是:安全性和性能速度不可兼得。
2.2 事务隔离
1、并发时遇到的问题
在事务并发操作时,经常出现一些问题,这些问题可用几个术语名词描述:
A、脏读
一个事务读取了另一个事务并发写的未提交的数据,比如:事务A读取了事务B写入的数据,但是B事务并未提交,后来其撤销了修改,此时事务A就读取了不该读取的数据。
B、幻读
一个事务重复读取数据,在获得的数据行中发现某些数据是其它事务最近操作的数据,比如:事务A反复执行查询语句查询数据表,而这时另一事务B正在操作该表,恰好的是事务B操作的数据正符合事务A查询的条件,而事务A再读取时,发现结果集发生了变化,这在并发事务时经常出现。
C、不可重复读
一个事务重复读取之前读取过的数据,后发现读取的数据被另一个事务所修改,比如:事务A反复读取指定的数据,而此时事务B正好操作该数据,当事务A再次查询时,发现之前读取的数据已经变化。
注:
上面事务并发出现的问题,可以通过设置事务的隔离来处理,但不能完全依赖事务隔离,而是应该在应用程序中恰当的使用锁来控制并发访问,两者的结合是解决的问题关键。
2、事务的隔离级别
事务隔离级别分为4种:
READ UNCOMMITED // 允许幻读,脏读及不可重复读;
READ COMMITED // 允许幻读和不可重复读,不允许脏读;
REPEATABLE READ // 允许幻读,不允许脏读和不可重复读;
SERIALIZABLE READ // 不允许幻读,脏读及不可重复读;
注:
Mysql默认的是REPEATABLEREAD级别。另外,随着事务的隔离级别越高,并发执行的性能就越低,所以适当选择级别并结合业务需求来选定级别设置。
三、代码使用
C#中的使用
public static bool ExcuteTransactionSQL(List<string> strSQL) { using (MySqlConnection conn = new MySqlConnection(strConn)) { conn.Open(); MySqlTransaction transaction = conn.BeginTransaction(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; cmd.Transaction = transaction; try { for (int n = 0; n < strSQL.Count; n++) { string strsql = strSQL[n]; if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; cmd.ExecuteNonQuery(); } } cmd.ExecuteNonQuery(); transaction.Commit(); conn.Close(); return true; } catch { transaction.Rollback(); conn.Close(); return false; } } }
四、总结
- 事务的使用场景
- 事务ACID
- 事务的隔离
- 事务在代码中的使用
- mysql——数据库事务(C#代码)
- MySQL数据库优化(二)——MySQL事务
- 事务的使用(sql server 数据库和C#代码)
- C#中ADO事务(轻型事务/分布式事务) -附:(C#远程访问linux(ubuntu)或windows的mysql数据库 )
- C#学习总结(3)——代码连接mysql数据库(VS工具)
- [转]c# + mysql + 事务处理(转载于 《C#数据库事务原理及实践》)
- c# + mysql + 事务处理(转载于 《C#数据库事务原理及实践》)
- 高性能MySQL学习笔记(3) —— 数据库事务
- 代码配置都没问题,为什么事务不回滚(了解Mysql数据库引擎)
- C#数据库事务控制
- C#数据库事务原理
- C#数据库事务
- C#操作mysql数据库的代码实例
- C#代码CRUD操作MySQL数据库
- 数据库 —— 事务
- 数据库——事务
- 数据库——事务
- 数据库——事务
- 安卓基础4:网络编程1_消息机制和图片处理
- FormsAuthentication.SignOut() 后,并未真正退出的原因
- #!_MVC数据库连接访问与生成问题
- Azure虚拟机批量设置静态IP
- 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭
- mysql——数据库事务(C#代码)
- MVC开发Entity更新数据库错误
- asp.net Mvc 访问静态页面
- codeforces An express train to reveries 814B
- 【转】C#中调用python脚本
- 重装powershell出现错误
- Android 仿微博@ # 艾特 话题功能
- 使用Asp.net 接收html提交的表单
- MVC View面页提交表单时,面页接收不到值时