PostgreSQL資料庫修改sql表的方法彙總
一,修改表
PostgreSQL 提供了一族命令用於修改現有表。
可以實現:
增加欄位,
刪除欄位,
增加約束,
刪除約束,
修改預設值,
重新命名欄位,
重新命名錶。
這些操作可以用:ALTER TABLE命令執行的。
1,增加欄位
要增加一個欄位,使用這條命令:
ALTER TABLE products ADD COLUMN description text;
新增的欄位對於表中已經存在的行而言最初將先填充空值。
你也可以同時在該欄位上定義約束,使用通常的語法:
ALTER TABLE products ADD COLUMN description text CHECK (description <> '');
一個新欄位不能用非空約束,因為最初的時候該欄位必須包含空值。 但是你可以稍後增加一個非空約束。同樣,你也不能在一個新欄位 上定義預設值。根據 SQL 標準的說明,這樣需要對現存行的新 欄位填充預設值,而這個特性還沒有實現。但是你可以稍後調整 欄位預設。
2,刪除欄位
除一個欄位:
ALTER TABLE products DROP COLUMN description;
要增加一個約束,使用表約束語法。比如:
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;
這個約束將立即進行檢查,所以表在加入約束之前必須符合約束條件。
4,刪除約束
要刪除一個約束,你需要知道它的名字。如果你給了它一個名字, 那麼事情就好辦了。
否則系統會分配一個生成的名字,這樣你就需要 把它找出來了。psql 的命令 \d tablename 在這兒可以幫忙﹔
其它介面可能也提供了檢查表的細節的方法。
命令:
ALTER TABLE products DROP CONSTRAINT some_name;
除了非空約束外,所有約束型別都這麼用。要刪除非空型別,用
ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
(要記得非空約束沒有名字。)
5,改變預設值
要給一個欄位設定預設值,使用一個象下面這樣的命令:
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
要刪除預設值,用
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
這樣相當於把預設設定為空,至少在 PostgreSQL裡是這樣的。
如果刪除一個還沒有定義的預設值不算錯誤,因為預設隱含就是空值。
6,給欄位改名字
重新命名一個欄位:
ALTER TABLE products RENAME COLUMN product_no TO product_number;
To rename a table:
ALTER TABLE products RENAME TO items;
8, postgresql 9.0以後更改欄位長度會重寫表,如果表比較大,那麼表會加鎖,需要很長時間,這裡介紹一種方法通過修改pg_attribute.atttypmod欄位修改長度,不需要重寫表
假如表中atttypemod為6,變長型別頭資訊佔去4個位元組,這裡6-4=2就是我們欄位的長度。
檢視修改如下:
select atttypmod from pg_attribute where attrelid='hall_info'::regclass and attname='holiday';
update pg_attribute set atttypmod=19 where attrelid='hall_info'::regclass and attname='holiday'; (hall_info:表名,holiday:欄位名,該欄位長度改為:15)
注:建立一個作為外來鍵的欄位company_id
首先: alter table dtb_order add column company_id int default 0;
再: alter table dtb_order add foreign key(company_id) references dtb_transinfo;
實際專案中經常會遇到要修改表結構的需求, 現在總結下postgres中修改表結構
比如, 現在有個表,
CREATE TABLE test
(
id bigint NOT NULL,
name character varying,
CONSTRAINT pk_test PRIMARY KEY (id) -------這個個約束(constraint), 主鍵約束
)
WITH (
OIDS=FALSE
);
ALTER TABLE pets
OWNER TO postgres;
1. 增加列, 修改主鍵
之前表有2個欄位, id和name, id是主鍵, 現在有需求增加一個index, 並且需求是主鍵改為id和index, sql語句如下
alter table test add column test_index smallint not null default 0; -----------增加一個列 test_index
alter table test drop constraint pk_test; ----------------刪除之前的主鍵約束
alter table test add constraint pk_test PRIMARY_KEY(id, test_index); ------------重新增加一個主鍵
相關文章
- 資料庫常用的sql語句彙總資料庫SQL
- 監控資料庫效能的SQL彙總資料庫SQL
- SQL SERVER 2012查詢資料庫和所有表的大小方法彙總SQLServer資料庫
- 修改SQL-SERVER資料庫表結構的SQL命令SQLServer資料庫
- 資料庫_SQL-PostgreSQL資料庫SQL
- SQL特性彙總表SQL
- postgresql分割槽表修改資料表欄位SQL
- SQL server 修改表資料SQLServer
- JavaScript資料方法彙總JavaScript
- 水稻資料庫彙總資料庫
- PostgreSQL:表空間-->資料庫-->表SQL資料庫
- 值得白嫖的資料庫常用操作語句彙總(資料庫、資料表、資料操作)資料庫
- mysql 資料庫 表 欄位 編碼修改 方法MySql資料庫
- 【彙總】語料庫資源
- 修改SQL Server資料庫表的建立時間最簡單最直接有效的方法SQLServer資料庫
- 修改Oracle資料庫表的大小Oracle資料庫
- 修改SQL Server資料庫地址SQLServer資料庫
- 表空間常用sql彙總SQL
- 【SQL】查詢及修改資料庫預設表空間SQL資料庫
- MySQL資料庫中修改密碼方法總結(轉)MySql資料庫密碼
- 資料表每天五千四百萬資料,,如何彙總
- 關於修改資料庫名稱和ID的方法總結資料庫
- 資料預處理方法彙總
- SQL Server資料庫查詢優化的方法總結SQLServer資料庫優化
- PHP表單提交方法彙總PHP
- sql server 建臨時表修改資料SQLServer
- 修改資料庫db_name的方法資料庫
- postgresql資料庫安裝以及修改資料檔案路徑SQL資料庫
- mssql sqlserver 使用sql指令碼 清空所有資料庫表資料的方法分享SQLServer指令碼資料庫
- PostgreSQL11preview-分割槽表增強彙總SQLView
- 獲取sql server資料庫中所有庫、表、欄位名的方法SQLServer資料庫
- PostgreSQL外掛彙總SQL
- mysql資料庫最佳化彙總MySql資料庫
- Oracle資料庫中的多種SCN彙總Oracle資料庫
- 資料庫分庫分表解決方案彙總資料庫
- 資料庫分庫分表的總結資料庫
- MySQL sys庫常用SQL彙總大全MySql
- SQL建立資料庫和表SQL資料庫