Sqlite資料庫的Update知多少?

來源:互聯網
上載者:User

雖然號稱對Sqlite的使用有一年多的經驗,但實際上並沒有對Sqlite的各種文法有深入的瞭解,畢竟大多數時候選擇Sqlite這種微型資料庫,表結構設計上都十分的簡單,一些複雜的sql操作很少會用到。另一方面Sqlite居然理論上可以支援2TB的資料,相信隨著各路神仙對Sqlite的推崇,日後還是會大有作為的。

今天著重想談一談Sqlite中的Update。

1.典型的Update(支援)

              Update

                     T1

              Set

                     Column1 = v1,

                     Column2 =V2

              Where

                     key = V3;

2.Update…From(很不幸,Sqlite是不支援的)

              UPDATE

                     t1

              SET

                     Column1= t2. Column1

              FROM

                     t2, t1

              WHERE

                     t2.key = t1.key;

要進行表間更新Update…From是必須的,居然Sqlite不支援,有什麼別的辦法嗎?還確實有,替代方法有兩種:

首先,Sqlite裡面有一個新鮮玩意“INSERT OR REPLACE”,跟Mysql類似,這個結構能夠保證在存在的情況下替換,不存在的情況下更新,用這個機制就可以輕鬆實現Update…From 了。

              INSERT OR REPLACE INTO

                     t1( key, Column1, Column2)

              SELECT

                     t2.key, t2. Column1,t2. Column2

              FROM

                     t2, t1

              WHERE

                     t2.key = t1.key;

備忘:這種方法要避免插入操作,首先要確保是依照主鍵執行的更新,如果where條件不是主鍵可能就有點麻煩了。

要是不是主鍵的更新怎麼辦能?另外還有其他的辦法嗎?我們在這中情況下只能向典型的Update…where尋求協助了,下面是一個例子:

              UPDATE

                     t1

              SET

                     Column1 = ( SELECT Columnx FROM t2 WHERE t2.key =t1.key ),

                     Column2 = ( SELECT Columny FROM t2 WHERE t2.key =t1.key ),

              WHERE t1.key = ( SELECT key FROM t2 WHERE t2.key=t1.key);

下面舉一個主從表的例子,一個部門表,一個成員表,成員表中的部門名稱和代碼是冗餘的資訊,以部門表中的部門名稱和代碼更新成員表中的冗餘資訊:

              update

                     userlogins

              set

                     deptname = (select deptname from DepartMents where DepartMents.[DeptID] = userlogins.[DeptID]),

                     deptcode = (select deptcode from DepartMents where DepartMents.[DeptID] = userlogins.[DeptID])

              where

                     userlogins.[DeptID] = ( SELECT [DeptID] FROM DepartMents where DepartMents.[DeptID] = userlogins.[DeptID]);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.