SQL 事务及实例演示

系统 1611 0

简介

       事务,英文名称是 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),

)
  



界面

 


SQL 事务及实例演示


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


客户端代码

 

    private void btnExcuteSQLs_Click(object sender, EventArgs e)

        {

            List<string > strsql=new List<string>() ;

            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(List<string> SQLStringList)

        {

            //建立连接数据库

            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 );

            }

        }

   
  

 

 

总结

 

以上就是对SQL事务的一些理解和实践,总的来说。事务根据它本身的名字理解上就可以看出是用来执行


某一连串的对数据库的操作的,常用的就是一些多个sql语句的执行。上述中就是一个简单的例子,麻雀虽小五


脏俱全。里面有事务对SQL的封装,泛型的简单实用,以及如何向事务中传入参数等等一些基本的操作。与大


家分享。

 

SQL 事务及实例演示


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论