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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # TRUNCATE ## Name TRUNCATE?--?清空一個或一組表 ## Synopsis ``` TRUNCATE [ TABLE ] [ ONLY ] _name_ [ * ] [, ... ] [ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ] ``` ## 描述 `TRUNCATE`快速地從一堆表中刪除所有行。它和在每個表上進行無條件的 `DELETE`有同樣的效果,不過因為它不做表掃描,因而快得多。另外, 它快速回收磁盤空間,而不是請求一個隨后的`VACUUM`操作。 在大表上最有用。 ## 參數 `_name_` 要清空的表名字(可以有模式修飾)。如果在表名前聲明了`ONLY`, 那么只有那個表會被清空。如果沒有聲明`ONLY`,這個表以及其所有子表 (若有)會被清空。可選地,可以在表名后聲明`*`以明確指定包括子表。 `RESTART IDENTITY` 截斷表中的序列字段的序列值將被重置。 `CONTINUE IDENTITY` 不要改變序列的值。此為缺省。 `CASCADE` 級聯清空所有在該表上有外鍵引用的表,或者由于`CASCADE`而被添加到組中的表。 `RESTRICT` 如果有外鍵引用數據并且引用表沒有在命令行中列出,則拒絕清空。這是缺省。 ## 注意 你必須對表有`TRUNCATE`權限以清空它。 `TRUNCATE`在在操作的每個表上請求一個`ACCESS EXCLUSIVE`鎖, 這種鎖會阻塞表上的所有其他并發操作。當聲明了`RESTART IDENTITY`時, 任何被重啟的序列也會被排他鎖鎖住。如果需要對一個表并發訪問, 那么應該使用`DELETE`命令。 如果從其它表有到某個表的外鍵引用,那么就不能對該表使用`TRUNCATE`, 除非這些表在同一個命令中也被清空。在這種情況下檢查有效性要求進行表掃描, 而`TRUNCATE`并不做這樣的事情。`CASCADE` 選項可以用于級聯包含所有依賴表,但是使用此選項必須十分小心,否則可能丟失原本不想丟失的數據。 `TRUNCATE`不會觸發任何在該表上的`ON DELETE`觸發器。 但它會觸發`ON TRUNCATE`觸發器。如果任何表上定義有`ON TRUNCATE` 觸發器,則所有的`BEFORE TRUNCATE` 觸發器會在任何截斷發生之前觸發,而所有`AFTER TRUNCATE` 觸發器會在最后一個截斷執行后和任何序列重設后被觸發。該觸發器會以表執行的順序觸發 (首先是命令中列出的,然后是任何基于級聯添加的)。 | **Warning** | |:--- | | `TRUNCATE`不是mvcc 安全的操作(參考mvcc的文檔)。在截斷之后,所有并發的事務看到的該表都是空的,即使他們在截斷發生前使用快照。 這將是一個針對截斷發生之前沒有訪問截斷表的事務的問題,在事務中對截斷表的任何訪問至少產生一個 `ACCESS SHARE`鎖,這將阻塞`TRUNCATE`直到事務完成。 所以截斷不會導致在相同表上連續查詢時表內容上的明顯不一致, 但會導致截斷表和數據庫中其他表在內容上可見的不一致性。 | `TRUNCATE`在事務中斷表數據是安全可的:只要開啟的事物不提交,則事物會安全回滾。 當聲明了`RESTART IDENTITY`時,隱含的`ALTER SEQUENCE RESTART` 操作也會事務性的完成;也就是,如果包圍的事務沒有提交,它們將回滾。 這不同于`ALTER SEQUENCE RESTART`的正常行為。要知道, 如果在序列重啟之后與事務回滾之前執行了額外的序列操作, 那么這些操作的影響也會回滾,但是它們在`currval()`上的影響不會回滾; 也就是,在事務之后,`currval()`將繼續反映在失敗事務中獲得的最后序列值, 即使序列本身可能與其不再一致。這類似于`currval()`在一個失敗事務后的普通行為。 ## 例子 清空`bigtable`和`fattable`表: ``` TRUNCATE bigtable, fattable; ``` 同樣地,也重置任何相關的序列生成器: ``` TRUNCATE bigtable, fattable RESTART IDENTITY; ``` 清空`othertable`表,并且級聯清空所有通過外鍵約束引用 `othertable`的表: ``` TRUNCATE othertable CASCADE; ``` ## 兼容性 SQL:2008標準包括一個有語法`TRUNCATE TABLE` `_tablename_` 的`TRUNCATE`命令。`CONTINUE IDENTITY`/`RESTART IDENTITY` 也出現在那個標準中,但是有輕微的不同和相關的含義。該命令的一些并發行為通過標準定義實現的, 所以,如果必要,應該考慮上面的說明并與其他實現比較。
                  <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>

                              哎呀哎呀视频在线观看