SQL 事務及執行個體示範

來源:互聯網
上載者:User

SQL 事務及執行個體示範

簡介

事務,英文名稱是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),
)

介面

超級簡單的介面,為了整體性,還是上傳下,嘿嘿

用戶端代碼

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的封裝,泛型的簡單實用,以及如何向事務中傳入參數等等一些基本的操作。與大家分享。

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.