2014年12月4日 星期四

[Postgresql] 用2個PK來避免有相同組合


如果今天我們我一張表格要紀錄每一間店的銷售以及店號,要避免重覆的情況發生。我們可以利用以下語法建立表格,限制no以及shop 的組合不能重覆。

CREATE TABLE shop_sale

(

  id serial NOT NULL,

  no character(10) NOT NULL,

  shop character(10) NOT NULL,

  edittime time without time zone,

  CONSTRAINT demo_pkey PRIMARY KEY (no,shop )

)


今天我們新增二筆A001店的交易,是OK的。
INSERT INTO shop_sale(
             no, shop, edittime)
    VALUES ('1031204001', 'A001', statement_timestamp());


INSERT INTO shop_sale(
             no, shop, edittime)
    VALUES ('1031204002', 'A001', statement_timestamp());
接下來我們新增二筆A002店的交易,也是OK的。
INSERT INTO shop_sale(
             no, shop, edittime)
    VALUES ('1031204001', 'A002', statement_timestamp());


INSERT INTO shop_sale(
             no, shop, edittime)
    VALUES ('1031204002', 'A002', statement_timestamp());
接下來我們意外再次新增一筆A002店的1031204001交易,就會出現錯誤了。



錯誤: 重複的鍵值違反唯一限制 "demo_pkey"

DETAIL: Key "(no, shop)=(1031204002, A002 )" 已存在

********** Error **********

錯誤: 重複的鍵值違反唯一限制 "demo_pkey"

SQL state: 23505

Detail: Key "(no, shop)=(1031204002, A002 )" 已存在

沒有留言:

張貼留言