PostgreSQL 添加各種約束語法的操作
1. 添加主鍵
alter table goods add primary key(sid);
2. 添加外鍵
alter table orders add foreign key(goods_id) references goods(sid) on update cascade on delete cascade;
on update cascade: 被引用行更新時,引用行自動更新;
on update restrict: 被引用的行禁止更新;
on delete cascade: 被引用行刪除時,引用行也一起刪除;
on dellete restrict: 被引用的行禁止刪除;
3. 刪除外鍵
alter table orders drop constraint orders_goods_id_fkey;
4. 添加唯一約束
alter table goods add constraint unique_goods_sid unique(sid);
5. 刪除默認值
alter table goods alter column sid drop default;
6. 修改字段的數(shù)據(jù)類型
alter table goods alter column sid type character varying;
7. 重命名字段
alter table goods rename column sid to ssid;
補充:PostgreSQL-主鍵約束和唯一性約束的區(qū)別
在建索引的過程中遇到一些問題,網(wǎng)絡上搜索了一下基礎知識。一直以為唯一索引就已經(jīng)是主鍵了,至少在pg中看來不是這么回事兒。
1)主鍵約束(PRIMARY KEY)
1) 主鍵用于唯一地標識表中的每一條記錄,可以定義一列或多列為主鍵。
2) 是不可能(或很難)更新。
3) 主鍵列上沒有任何兩行具有相同值(即重復值),不允許空(NULL)。
4) 主健可作外健,唯一索引不可。
2)唯一性約束(UNIQUE)
1) 唯一性約束用來限制不受主鍵約束的列上的數(shù)據(jù)的唯一性,用于作為訪問某行的可選手段,一個表上可以放置多個唯一性約束。
2) 只要唯一就可以更新。
3) 即表中任意兩行在 指定列上都不允許有相同的值,允許空(NULL)。
4) 一個表上可以放置多個唯一性約束。
3)唯一索引(INDEX)
創(chuàng)建唯一索引可以確保任何生成重復鍵值的嘗試都會失敗。
唯一性約束和主鍵約束的區(qū)別:
(1)唯一性約束允許在該列上存在NULL值,而主鍵約束的限制更為嚴格,不但不允許有重復,而且也不允許有空值。
(2)在創(chuàng)建唯一性約束和主鍵約束時可以創(chuàng)建聚集索引和非聚集索引,但在 默認情況下主鍵約束產(chǎn)生聚集索引,而唯一性約束產(chǎn)生非聚集索引
約束和索引, 前者是用來檢查數(shù)據(jù)的正確性,后者用來實現(xiàn)數(shù)據(jù)查詢的優(yōu)化,目的不同。
唯一性約束與唯一索引有所不同:
(1)創(chuàng)建唯一約束會在Oracle中創(chuàng)建一個Constraint,同時也會創(chuàng)建一個該約束對應的唯一索引。
(2)創(chuàng)建唯一索引只會創(chuàng)建一個唯一索引,不會創(chuàng)建Constraint。
也就是說其實唯一約束是通過創(chuàng)建唯一索引來實現(xiàn)的。
在刪除時這兩者也有一定的區(qū)別:
刪除唯一約束時可以只刪除約束而不刪除對應的索引,所以對應的列還是必須唯一的,而刪除了唯一索引的話就可以插入不唯一的值。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
PGSQL 實現(xiàn)把字符串轉(zhuǎn)換成double類型(to_number())
這篇文章主要介紹了PGSQL 實現(xiàn)把字符串轉(zhuǎn)換成double類型(to_number()),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12PostgreSQL教程(四):數(shù)據(jù)類型詳解
這篇文章主要介紹了PostgreSQL教程(四):數(shù)據(jù)類型詳解,本文講解了數(shù)值類型、字符類型、布爾類型、位串類型、數(shù)組、復合類型等數(shù)據(jù)類型,需要的朋友可以參考下2015-05-05PostgreSQL upsert(插入更新)數(shù)據(jù)的操作詳解
這篇文章主要介紹了PostgreSQL upsert(插入更新)教程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01使用Postgresql 實現(xiàn)快速插入測試數(shù)據(jù)
這篇文章主要介紹了使用Postgresql 實現(xiàn)快速插入測試數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01Postgresql 數(shù)據(jù)庫 varchar()字符占用多少字節(jié)介紹
這篇文章主要介紹了Postgresql 數(shù)據(jù)庫 varchar()字符占用多少字節(jié)介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12postgresql 查詢集合結(jié)果用逗號分隔返回字符串處理的操作
這篇文章主要介紹了postgresql 查詢集合結(jié)果用逗號分隔返回字符串處理的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02postgresql rank() over, dense_rank(), row_number()用法區(qū)別
這篇文章主要介紹了postgresql rank() over, dense_rank(), row_number()的用法區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12