<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # SQLite 視圖,觸發器,事務 > 原文: [http://zetcode.com/db/sqlite/viewstriggerstransactions/](http://zetcode.com/db/sqlite/viewstriggerstransactions/) 在 SQLite 教程的這一部分中,我們將提到視圖,觸發器和事務。 ## SQLite 視圖 視圖是對來自一個或多個表的數據的特定外觀。 它可以按特定順序排列數據,或突出顯示或隱藏某些數據。 視圖由存儲的查詢組成,該查詢可作為由查詢結果集組成的虛擬表訪問。 與普通表不同,視圖不構成物理模式的一部分。 它是根據數據庫中的數據計算或整理的動態虛擬表。 在下一個示例中,我們創建一個簡單的視圖。 ```sql sqlite> SELECT * FROM Cars; Id Name Price ----------- ----------- ---------- 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600 ``` 這是我們的數據,我們在該數據上創建視圖。 ```sql sqlite> CREATE VIEW CheapCars AS SELECT Name FROM Cars WHERE Price < 30000; sqlite> SELECT * FROM CheapCars; Name ----------- Skoda Volvo Citroen Volkswagen ``` `CREATE VIEW`語句用于創建視圖。 ```sql sqlite> .tables Books CheapCars Friends Names Reservations Cars Customers Log Orders Testing sqlite> DROP VIEW CheapCars; sqlite> .tables Books Customers Log Orders Testing Cars Friends Names Reservations ``` 從技術上講,視圖是虛擬表。 因此,我們可以使用`.tables`命令列出所有視圖。 要刪除視圖,我們使用`DROP VIEW`語句。 ## SQLite 觸發器 觸發器是在發生指定的數據庫事件時自動執行的數據庫操作。 在下面的示例中,我們將使用`Friends`表并創建一個新的`Log`表。 ```sql sqlite> CREATE TABLE Log(Id INTEGER PRIMARY KEY, OldName TEXT, ...> NewName TEXT, Date TEXT); ``` `Log`表的一列中包含朋友的舊名稱和新名稱。 它還有一個時間戳列。 ```sql CREATE TRIGGER mytrigger UPDATE OF Name ON Friends BEGIN INSERT INTO Log(OldName, NewName, Date) VALUES (old.Name, new.Name, datetime('now')); END; ``` 我們使用`CREATE TRIGGER`語句創建一個名為`mytrigger`的觸發器。 每當我們更新`Friends`表的`Name`列時,此觸發器將啟動`INSERT`語句。 `INSERT`語句會將舊名稱,新名稱和時間戳插入`Log`表中。 `old`和`new`是對要修改的行的引用。 ```sql sqlite> SELECT name, tbl_name FROM sqlite_master WHERE type='trigger'; name tbl_name ----------- ----------- mytrigger Friends ``` 為了列出可用的觸發器及其對應的表,我們查詢`sqlite_master`表。 ```sql sqlite> SELECT * FROM Friends; Id Name Sex ---------- ---------- ---------- 1 Jane F 2 Thomas M 3 Franklin M 4 Elisabeth F 5 Mary F 6 Lucy F 7 Jack M ``` 這是我們的數據。 接下來,我們將更新`Friends`表的一行。 ```sql sqlite> UPDATE Friends SET Name='Frank' WHERE Id=3; ``` 我們更新表的第三行。 觸發器啟動。 ```sql sqlite> SELECT * FROM Log; Id OldName NewName Date ----------- ----------- ---------- ------------------- 1 Franklin Frank 2014-11-18 10:58:46 ``` 我們檢查`Log`表。 此日志確認我們執行的更新操作。 ## SQLite 事務 事務是針對一個或多個數據庫中數據的數據庫操作的基本單位。 事務中所有 SQL 語句的影響可以全部提交給數據庫,也可以全部回滾。 在 SQLite 中,除`SELECT`以外的任何命令都將啟動隱式事務。 手動事務以`BEGIN TRANSACTION`語句開始,并以`COMMIT`或`ROLLBACK`語句結束。 ```sql BEGIN TRANSACTION; CREATE TABLE Test(Id INTEGER NOT NULL); INSERT INTO Test VALUES(1); INSERT INTO Test VALUES(2); INSERT INTO Test VALUES(3); INSERT INTO Test VALUES(NULL); COMMIT; ``` 在這里,我們有一個示例事務。 事務以`BEGIN TRANSACTION`開頭,以`COMMIT`結束。 我們在 ID 列上設置了`NOT NULL`約束。 因此,第四次插入將不會成功。 SQLite 會逐案管理事務。 對于某些錯誤,它將還原所有更改。 對于其他用戶,它僅還原最后一條語句,而其他更改保持不變。 在我們的情況下,將創建表并將前三個插入內容寫入表中。 第四個不是。 說,我們已經有一個名為`Test`的空表。 執行上述事務將完全失敗。 不會寫入任何更改。 如果我們將`CREATE TABLE`語句更改為`CREATE TABLE IF NOT EXISTS,`,則前三個語句將執行。 ```sql BEGIN TRANSACTION; CREATE TABLE IF NOT EXISTS Test(Id INTEGER NOT NULL); INSERT INTO Test VALUES(11); INSERT INTO Test VALUES(12); INSERT INTO Test VALUES(13); INSERT INTO Test VALUES(NULL); ROLLBACK; ``` 事務可以以`COMMIT`或`ROLLBACK`語句結束。 `ROLLBACK`恢復所有更改。 在 SQLite 教程的這一部分中,我們使用了 SQLite 中的視圖,觸發器和事務。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看