php sql事务实例,SQL 事务及实例演示

本文深入介绍了数据库事务的概念,包括原子性、一致性、隔离性和持久性四大特性,并通过一个坐火车的例子生动阐述了这些特性。此外,还通过C#代码展示了如何在实际操作中运用事务进行数据的更新和添加,强调了事务在并发控制中的作用,以及事务回滚的重要性。
摘要由CSDN通过智能技术生成

就是事务执行后,保证数据库的所有数据都从一个状态到另一个状态。用上面的例子,可以这样理解,你上半身进了火车、坐好了;你的

简介

事务,英文名称是transaction。是在对数据库进行管理操作过程中一个逻辑单位,由有限的操作序列构成。其实这个概念很好懂,简单理解就是:事务就是在使用数据库中的一个操作,由一些操作放到一起构成一个完整的事务。例如:坐火车。假如坐火车只有两个动作,买票,上车;这样的话坐火车就需要两个操作来完成,买票、上车,现在将买票、上车都定义到这个坐火车的操作里面。这样的话就方便了,想坐火车就直接调用坐火车操作就完成坐火车的操作了。这里的坐火车就是一个事务,这里还有一种情况就是买票成功了,但是没有赶上火车,这时候我就需要把票给退了,退票这个操作就称为回滚。

特性

那到底什么才是数据库事务呢?就产生了数据库事务的四个特性,,通过这四个特性我们更好的理解事务,也能够反过来来辨别什么样的操作是事务。

数据库事务的特性简单来说就是ACID。

A(Atomic)翻译为中文就是原子性

原子就是不可分割(在最初的时期是这么理解的)。所以可以理解到事务就是一个整体,一旦执行就是执行整个事务,要么就不执行。

C(Consistency)一致性

就是事务执行后,保证数据库的所有数据都从一个状态到另一个状态。用上面的例子,可以这样理解,你上半身进了火车、坐好了;你的脚也要上火车、放好了(有点慎得慌)。但是是这个道理。

I(Isolation)隔离行

就是事务之间在执行的时候互补干扰,这里会提到一个并发控制的概念。什么是并发控制呢?并发控制就是针对并发操作对数据操作异常的控制。举个例子,又是买火车票;小林和小李都去网上买票,还剩5张,他俩11:11同时去买同一张,这样两个事务同时访问这个火车票,同时将剩余张改为4.这时候实际上卖了2张,实际上剩了3张,而数据库中为4张,这就造成了数据的异常。怎么处理呢?有一个办法,就是当你处理这个对象的时候,将这个对象锁定(lock),当完成事务后解锁(unlock)。只有当对象的状态为unlock的状态时,才能够对这个对象进行访问。说了多了啊,简单扩展一下。嘿嘿

D(Durability),持久性

这个就更容易理解了。简单理解就是你的对数据库的操作一定是可以永久存在数据中的。

通过上述的讲解,我们简单了解了事务和事务的回滚以及事务的特性。下面我们通过另一个简单的小例子来从代码层面上感受一下事务,顺便熟悉泛型的使用。

环境:vs 2010 sql 2008

项目测试:通过事务来更新、添加数据

创建数据库代码

create database login

use login

create table login

(

username varchar(20),

userpwd varchar(20),

userlevel varchar(20),

)

界面

79310bff74c914292ae8b87e8bbee28d.png

超级简单的界面,为了整体性,还是上传下,嘿嘿

客户端代码

private void btnExcuteSQLs_Click(object sender, EventArgs e)

{

Liststrsql=new List() ;

string strone = "insert into login values('aaa','aaa','aaa')";

string strtwo = "update login set userlevel ='12' where username='cfl' ";

strsql.Add(strone);

strsql.Add(strtwo );

try

{

ExcuteSQLs(strsql);

}

catch (Exception ee )

{

MessageBox.Show(ee.Message);

throw new Exception(ee.Message );

//MessageBox.Show(ee.Message );

}

}

public void ExcuteSQLs(ListSQLStringList)

{

//建立连接数据库

SqlConnection conn = new SqlConnection("server=“ip”;database=login;uid=sa;pwd=123456;");

//打开数据库

conn.Open();

//建立执行数据操作命令对象

SqlCommand cmd = new SqlCommand();

//将数据库连接对象赋值给命令对象

cmd.Connection = conn;

//执行事务

SqlTransaction tx = conn.BeginTransaction();

//将事务赋值给命令对象

cmd.Transaction = tx;

try

{

//通过for循环遍历在泛型中的sql语句

for (int i = 0; i < SQLStringList.Count ; i++)

{

string strsql = SQLStringList[i].ToString();

//当字符串不为空,则执行

if (strsql.Length >1)

{

//传入将要执行的sql语句

cmd.CommandText = strsql;

//执行无参数化查询

cmd.ExecuteNonQuery();

}

}

//事务提交

tx.Commit();

}

catch (System .Data.SqlClient .SqlException e)

{

throw new Exception (e.Message );

}

}

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值