我有两张桌子:
CREATE TABLE "user"
(
username character varying(35) NOT NULL,
CONSTRAINT user_pk PRIMARY KEY (username)
)
CREATE TABLE item
(
id serial NOT NULL,
username character varying(35),
user_item_number integer,
item_value character varying(35),
CONSTRAINT item_pk PRIMARY KEY (id),
CONSTRAINT item_fk FOREIGN KEY (username)
REFERENCES "user" (username) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT unique_item_username UNIQUE (username, user_item_number)
)
我想user_item_number
为每个username
. 下图显示了示例。对于每个username
: ( user1
, user2
)user_item_number
从 1 开始并递增 1。
user_item_number
我想我应该在插入之前使用一些触发器来获取插入的最大值username
并增加它。但我不知道如何编写该触发器。
我也不知道如何考虑并发访问(并发插入多个具有相同值的行username
)。我不想在插入两行相同的行时出现约束冲突错误username
,user_item_number
我希望触发器捕获该错误并再次增加 user_item_number
值。
任何想法?