如何在PostgreSQL中添加各種約束?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)建站是一家專業(yè)提供延吉企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、html5、小程序制作等業(yè)務(wù)。10年已為延吉眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。alter table goods add primary key(sid);
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: 被引用的行禁止刪除;
alter table orders drop constraint orders_goods_id_fkey;
alter table goods add constraint unique_goods_sid unique(sid);
alter table goods alter column sid drop default;
alter table goods alter column sid type character varying;
alter table goods rename column sid to ssid;
補(bǔ)充:PostgreSQL-主鍵約束和性約束的區(qū)別
在建索引的過程中遇到一些問題,網(wǎng)絡(luò)上搜索了一下基礎(chǔ)知識。一直以為索引就已經(jīng)是主鍵了,至少在pg中看來不是這么回事兒。
1) 主鍵用于地標(biāo)識表中的每一條記錄,可以定義一列或多列為主鍵。
2) 是不可能(或很難)更新。
3) 主鍵列上沒有任何兩行具有相同值(即重復(fù)值),不允許空(NULL)。
4) 主健可作外健,索引不可。
1) 性約束用來限制不受主鍵約束的列上的數(shù)據(jù)的性,用于作為訪問某行的可選手段,一個表上可以放置多個性約束。
2) 只要就可以更新。
3) 即表中任意兩行在 指定列上都不允許有相同的值,允許空(NULL)。
4) 一個表上可以放置多個性約束。
創(chuàng)建索引可以確保任何生成重復(fù)鍵值的嘗試都會失敗。
性約束和主鍵約束的區(qū)別:
(1)性約束允許在該列上存在NULL值,而主鍵約束的限制更為嚴(yán)格,不但不允許有重復(fù),而且也不允許有空值。
(2)在創(chuàng)建性約束和主鍵約束時可以創(chuàng)建聚集索引和非聚集索引,但在 默認(rèn)情況下主鍵約束產(chǎn)生聚集索引,而性約束產(chǎn)生非聚集索引
約束和索引, 前者是用來檢查數(shù)據(jù)的正確性,后者用來實(shí)現(xiàn)數(shù)據(jù)查詢的優(yōu)化,目的不同。
性約束與索引有所不同:
(1)創(chuàng)建約束會在Oracle中創(chuàng)建一個Constraint,同時也會創(chuàng)建一個該約束對應(yīng)的索引。
(2)創(chuàng)建索引只會創(chuàng)建一個索引,不會創(chuàng)建Constraint。
也就是說其實(shí)約束是通過創(chuàng)建索引來實(shí)現(xiàn)的。
在刪除時這兩者也有一定的區(qū)別:
刪除約束時可以只刪除約束而不刪除對應(yīng)的索引,所以對應(yīng)的列還是必須的,而刪除了索引的話就可以插入不的值。
關(guān)于如何在PostgreSQL中添加各種約束問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。