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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 5.5\. 修改表 如果你創建了一個表后發現自己犯了一個錯誤,或者是應用的需求發生了變化, 那么你可以刪除這個表然后重新創建它。但是如果這個表已經填充了許多數據, 或者該表已經被其它數據庫對象引用(比如一個外鍵約束),那這可不是一個方便的方法。 因此PostgreSQL提供了一族命令用于修改現有表。 請注意它在概念上和修改一個表中包含的數據是不一樣的: 這里我們感興趣的是修改一個表的定義,或者說結構。 你可以: * 增加字段 * 刪除字段 * 增加約束 * 刪除約束 * 修改缺省值 * 修改字段數據類型 * 重命名字段 * 重命名表 所有這些動作都是用[ALTER TABLE](#calibre_link-88)命令執行的, 它的參考頁面包含超出這里給出的詳細信息。 ## 5.5.1\. 增加字段 要增加一個字段,使用下面這樣的命令: ``` ALTER TABLE products ADD COLUMN description text; ``` 新增的字段對于表中已經存在的行而言最初將先填充所給出的缺省值 (如果你沒有聲明`DEFAULT`子句,那么缺省是NULL)。 你也可以同時在該字段上定義約束,使用通常的語法: ``` ALTER TABLE products ADD COLUMN description text CHECK (description <> ''); ``` 實際上,所有在`CREATE TABLE`里描述的可以應用于字段的選項都可以在這里使用。 不過,我們要注意的是缺省值必須滿足給出的約束,否則`ADD`將會失敗。另外, 你可以在正確填充了新字段的數值之后再增加約束(見下文)。 > **Tip:** 添加一個字段并填充缺省值將會導致更新表中的所有行(為了存儲新字段的值), 但如果沒有聲明缺省值,PostgreSQL就可以避免物理更新。 所以如果你將要在新字段中填充的值大多數都不等于缺省值, 那么最好添加一個沒有缺省值的字段,然后再使用`UPDATE`更新數據, 最后使用下面的方法添加缺省值。 ## 5.5.2\. 刪除字段 要刪除一個字段,使用下面這樣的命令: ``` ALTER TABLE products DROP COLUMN description; ``` 不管字段里有啥數據,都會消失,和這個字段相關的約束也會被刪除。不過, 如果這個字段被另一個表的外鍵約束所引用,PostgreSQL 則不會隱含地刪除該約束。你可以通過使用`CASCADE`指明刪除任何依賴該字段的東西: ``` ALTER TABLE products DROP COLUMN description CASCADE; ``` 參閱[Section 5.12](#calibre_link-1815)獲取有關這些操作背后的機制的信息。 ## 5.5.3\. 增加約束 要增加一個約束,必須使用表約束語法。比如: ``` ALTER TABLE products ADD CHECK (name <> ''); ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no); ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups; ``` 要增加一個不能寫成表約束的非空約束,使用下面的語法: ``` ALTER TABLE products ALTER COLUMN product_no SET NOT NULL; ``` 這個約束將立即進行檢查,所以表在添加約束之前必須符合約束條件。 ## 5.5.4\. 刪除約束 要刪除一個約束,你需要知道它的名字。如果你曾經給了它取了名字, 那么事情就很簡單。否則你就需要找出系統自動分配的名字。psql 的命令`\d` `_tablename_`可以幫這個忙; 其它接口可能也提供了檢查表的細節的方法。然后就是這條命令: ``` ALTER TABLE products DROP CONSTRAINT some_name; ``` 如果你在處理一個生成的約束名,比如`$2`,別忘了你需要給它添加雙引號, 讓它成為一個有效的標識符。 和刪除字段一樣,如果你想刪除被依賴的約束,你需要用`CASCADE`。 一個例子是某個外鍵約束依賴被引用字段上的唯一約束或者主鍵約束。 除了非空約束外,所有約束類型都這么用。要刪除非空約束,可以這樣: ``` ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL; ``` 要記得非空約束沒有名字。 ## 5.5.5\. 改變字段的缺省值 要給一個字段設置缺省值,可以使用一個像下面這樣的命令: ``` ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77; ``` 請注意這么做不會影響任何表中現有的數據行,它只是為將來的`INSERT`命令改變缺省值。 要刪除缺省值,可以用: ``` ALTER TABLE products ALTER COLUMN price DROP DEFAULT; ``` 這樣實際上相當于把缺省設置為空。結果是, 如果我們刪除一個還沒有定義的缺省值不算錯誤,因為缺省隱含就是NULL。 ## 5.5.6\. 修改字段的數據類型 把一個字段轉換成另外一種數據類型,使用下面的命令: ``` ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2); ``` 只有在字段里現有的每個項都可以隱含的轉換成新類型時才可能成功。 如果需要更復雜的轉換,你可以增加一個`USING`子句,它聲明如何從舊值里計算新值。 PostgreSQL將試圖把字段的缺省值(如果存在)轉換成新的類型, 還有涉及該字段的任何約束。但是這些轉換可能失敗,或者可能生成奇怪的結果。 在修改某字段類型之前,你最好刪除那些約束,然后再把合適的約束添加上去。 ## 5.5.7\. 重命名字段 重命名一個字段: ``` ALTER TABLE products RENAME COLUMN product_no TO product_number; ``` ## 5.5.8\. 重命名表 重命名一個表: ``` ALTER TABLE products RENAME TO items; ```
                  <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>

                              哎呀哎呀视频在线观看