<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國際加速解決方案。 廣告
                # CREATE SEQUENCE ## Name CREATE SEQUENCE?--?定義一個新序列發生器 ## Synopsis ``` CREATE [ TEMPORARY | TEMP ] SEQUENCE _name_ [ INCREMENT [ BY ] _increment_ ] [ MINVALUE _minvalue_ | NO MINVALUE ] [ MAXVALUE _maxvalue_ | NO MAXVALUE ] [ START [ WITH ] _start_ ] [ CACHE _cache_ ] [ [ NO ] CYCLE ] [ OWNED BY { _table_name_._column_name_ | NONE } ] ``` ## 描述 `CREATE SEQUENCE`將向當前數據庫里增加一個新的序列號生成器。 包括創建和初始化一個新的名為`_name_` 的單行表。生成器將被使用此命令的用戶所有。 如果給出了一個模式名,那么該序列就在給定的模式中創建的。 否則它會在當前模式中創建。臨時序列存在于一個特殊的模式中, 因此創建臨時序列的時候不能給出模式名。序列名必需和同一模式中的其它序列、 表、索引、視圖或外表的名字不同。 在創建序列后,你可以使用`nextval`、 `currval`和`setval`函數操作序列。 這些函數在[Section 9.16](#calibre_link-700)中有詳細文檔。 盡管你不能直接更新一個序列,但你可以使用: ``` SELECT * FROM _name_; ``` 檢查一個序列的參數和當前狀態。特別是序列的`last_value` 字段顯示了任意會話最后分配的數值。(當然,如果其它會話正積極地使用 `nextval`,這些值在被打印出來的時候可能就已經過時了。) ## 參數 `TEMPORARY` 或 `TEMP` 如果聲明了這個修飾詞,那么該序列對象只為這個會話創建, 并且在會話結束的時候自動刪除。在臨時序列存在的時候, 除非用模式修飾的名字引用,否則同名永久序列是不可見的(在同一會話里)。 `_name_` 將要創建的序列名(可以用模式修飾) `_increment_` 可選子句`INCREMENT BY` `_increment_`指定序列的步長。 一個正數將生成一個遞增的序列,一個負數將生成一個遞減的序列。缺省值是 1 。 `_minvalue_``NO MINVALUE` 可選的子句`MINVALUE` `_minvalue_` 指定序列的最小值。如果沒有聲明這個子句或者聲明了`NO MINVALUE`, 那么遞增序列的缺省為 1 ,遞減序列的缺省為-2&lt;sup class="calibre28"&gt;63&lt;/sup&gt;-1。 `_maxvalue_` `NO MAXVALUE` 可選的子句`MAXVALUE` `_maxvalue_` 指定序列的最大值。如果沒有聲明這個子句或者聲明了`NO MAXVALUE`, 那么遞增序列的缺省為2&lt;sup class="calibre28"&gt;63&lt;/sup&gt;-1,遞減序列的缺省為 -1 。 `_start_` 可選的子句`START WITH` `_start_` 指定序列的起點。缺省初始值對于遞增序列為`_minvalue_`, 對于遞減序列為`_maxvalue_`。 `_cache_` 可選的子句`CACHE` `_cache_` 為快速訪問而在內存里預先存儲多少個序列號。最小值(也是缺省值)是 1 , 表示一次只能生成一個值,也就是說沒有緩存。 `CYCLE` `NO CYCLE` `CYCLE`選項可用于使序列到達 `_maxvalue_`或 `_minvalue_`時可循環并繼續下去。 也就是如果達到極限,生成的下一個數據將分別是 `_minvalue_` 或`_maxvalue_`。 如果聲明了`NO CYCLE`,那么在序列達到其最大值之后任何對 `nextval`的調用都將返回一個錯誤。 如果既沒有聲明`CYCLE`也沒有聲明`NO CYCLE`, 那么`NO CYCLE`是缺省。 `OWNED BY` `_table_name_`.`_column_name_` `OWNED BY NONE` `OWNED BY`選項將序列關聯到一個特定的表字段上。這樣, 在刪除那個字段或其所在表的時候將自動刪除綁定的序列。 指定的表和序列必須被同一個用戶所擁有,并且在在同一個模式中。 默認的`OWNED BY NONE`表示不存在這樣的關聯。 ## 注意 使用`DROP SEQUENCE`刪除一個序列。 序列是基于`bigint`運算的,因此其范圍不能超過八字節的整數范圍 (-9223372036854775808 到 9223372036854775807)。 在一些古老的平臺上可能沒有對八字節整數的編譯器支持, 這種情況下序列使用普通的`integer`運算范圍(-2147483648 到 +2147483647)。 如果`_cache_`大于一, 并且這個序列對象將被用于多會話并發的場合,那么可能會有不可預料的結果發生。 每個會話在每次訪問序列對象的過程中都將分配并緩存隨后的序列值, 并且相應增加序列對象的`last_value`。這樣, 同一個事務中的隨后的`_cache_`-1 次`nextval`將只是返回預先分配的數值,而不是使用序列對象。 因此,任何在會話中分配了卻沒有使用的數字都將在會話結束時丟失, 從而導致序列里面出現"空洞"。 另外,盡管系統保證為多個會話分配獨立的序列值,但是如果考慮所有會話, 那么這個數值可能會丟失順序。比如,如果`_cache_` 為 10 ,那么會話 A 保留了 1..10 并且返回`nextval`=1, 然后會話 B 可能會保留 11..20 然后在會話 A 生成`nextval`=2 之前返回`nextval`=11。因此,對于 `_cache_`等于一的情況, 可以安全地假設`nextval`值是順序生成的;而如果把 `_cache_`設置為大于一, 那么你只能假設`nextval`值總是不同的,卻不按順序生成。 同樣,`last_value`將反映任何會話保留的最后數值, 不管它是否曾被`nextval`返回。 另外一個考慮是在這樣的序列上執行的`setval` 將不會被其它會話注意到,直到它們用光他們自己緩存的數值。 ## 例子 創建一個叫`serial`的遞增序列,從 101 開始: ``` CREATE SEQUENCE serial START 101; ``` 從此序列中選出下一個數字: ``` SELECT nextval('serial'); nextval --------- 101 ``` 從此序列中選出下一個數字: ``` SELECT nextval('serial'); nextval --------- 102 ``` 在一個`INSERT`中使用此序列: ``` INSERT INTO distributors VALUES (nextval('serial'), 'nothing'); ``` 在一個`COPY FROM`后更新序列: ``` BEGIN; COPY distributors FROM 'input_file'; SELECT setval('serial', max(id)) FROM distributors; END; ``` ## 兼容性 `CREATE SEQUENCE`遵循SQL標準, 只有下面的例外: * 還不支持標準的`AS &lt;數據類型&gt;`表達式。 * 使用`nextval()`函數而不是標準的 `NEXT VALUE FOR`表達式獲取下一個數值。 * `OWNED BY`子句是PostgreSQL的擴展。 ## 又見 [ALTER SEQUENCE](#calibre_link-621), [DROP SEQUENCE](#calibre_link-619)
                  <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>

                              哎呀哎呀视频在线观看