海上月明

          editer by sun
          posts - 162, comments - 51, trackbacks - 0, articles - 8
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          From:http://www.cnblogs.com/liping13599168/archive/2011/05/24/2054908.html

           你可能在批量處理一個事務的時候,想要批量插入一系列的數據,但是這些數據當添加完一次之后,重新添加的時候,你不想要重新添加,只是想將原有的數據進行更新,例如:我想要通過Excel將一系列的圖書導入到數據庫中,而這些圖書在你下一次編輯之后,重新導入,只是對原有的數據進行修改。以上是一個業務的場景。

          在MSSQL中,你可以使用諸如:

          IF NOT EXISTS(SELECT * FROM Book WHERE ….) THEN INSERT INTO ... ELSE UPDATE SET ...

          這樣的SQL語法表示。而在SQLite中,不支持這樣的語法。

          而對應的,在Sqlite中可以使用 Replace Into 或者 Insert Or Replace Into 這樣的語法格式。

           

          現在,我使用SQLite Developer的Sqlite客戶端數據庫管理工具,來創建數據表,對應字段如下:

          image

           

          然后,標簽切換到“索引”欄:

          image

          這里我將Name(書名)和Author(作者)創建索引,并且規定為唯一索引。保存數據表。

          這樣就意味著只要Name和Author對應是相同的,Replace into 對應的就變成 Update,如果不完成相同,就對應變成 Insert 語句。

           

          于是我在“查詢數據”中,執行SQL語句:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          REPLACE INTO tbl_book
            (
              Name ,
              Author ,
              PublishDate ,
              pagecount ,
              Memo
            )
          VALUES
            (
              'WF高級程序設計' ,
              'Bruce Bukovics' ,
              date( ) ,
              454 ,
              'Test'
            ) ;

          第一次執行時,由于表中沒有數據,所以命令轉換為Insert;

          image

          當第二次執行時,由于表中已經存在相同的“Name”和“Author”的數據,于是不進行插入,而命令將轉換為Update。

          因此,當你執行以下語句時:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          REPLACE INTO tbl_book
            (
              Name ,
              Author ,
              PublishDate ,
              pagecount ,
              Memo
            )
          VALUES
            (
              'WF高級程序設計' ,
              'Bruce Bukovics' ,
              date( ) ,
              500 ,   -- 頁碼總數改變
              'Test2' -- 備注改變
            ) ;

          執行結果:

          image

          頁碼和備注都改變了,說明這里執行了Update。

           

          然后我修改Name名稱:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          REPLACE INTO tbl_book
            (
              Name ,
              Author ,
              PublishDate ,
              pagecount ,
              Memo
            )
          VALUES
            (
              'WPF揭秘' ,     -- 書名改變
              'Bruce Bukovics' ,
              date( ) ,
              500 ,   
              'Test2'
            ) ;

          執行結果:

          image

          插入了一條圖書的記錄,同樣你也可以嘗試改變Author,同樣也是插入記錄。

           

          這樣,您就可以通過在表中創建唯一索引并且利用Replace達到Insert OR Update的目的。


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 通州市| 抚远县| 南康市| 赣州市| 沈阳市| 峨山| 衡山县| 民权县| 五家渠市| 龙山县| 吴忠市| 温州市| 英山县| 兴安县| 赤水市| 永兴县| 布拖县| 西华县| 浙江省| 集贤县| 崇仁县| 左权县| 黄冈市| 筠连县| 万州区| 朔州市| 鄂伦春自治旗| 辽阳市| 碌曲县| 五莲县| 花莲县| 巴中市| 奇台县| 乐平市| 临夏县| 哈尔滨市| 涪陵区| 临潭县| 个旧市| 思茅市| 白银市|