Postgresql 更新作为主键的列值
我想在这里更新分类表。在jsp中 代码如下所示:Postgresql 更新作为主键的列值,postgresql,Postgresql,我想在这里更新分类表。在jsp中 代码如下所示: pstmt = conn.prepareStatement("UPDATE category SET description = ? where categoryname = ?"); pstmt.setString(1, request.getParameter("description")); pstmt.setString(2, request.getParameter("categoryname")); 而如果使用这种方式,我只能更
pstmt = conn.prepareStatement("UPDATE category SET description = ? where categoryname = ?");
pstmt.setString(1, request.getParameter("description"));
pstmt.setString(2, request.getParameter("categoryname"));
而如果使用这种方式,我只能更改描述值,而不能更改categoryname值。
表格如下:
CREATE TABLE category
(
categoryname character varying NOT NULL,
description character varying,
CONSTRAINT category_pkey PRIMARY KEY (categoryname)
)
WITH (
OIDS=FALSE
);
ALTER TABLE category
OWNER TO postgres;
我想知道是否可以更改categoryname列的值。如何更改jsp代码?
categoryname是主键,因为product表在这里有外键引用。
谢谢。是的,您可以更改categoryname列的值,但要小心。如果使用已存在的值更新此字段,则查询可能会失败 正如Joop所说,最佳做法是添加一个附加字段作为主键,该字段与业务数据没有任何关系 您的新数据库结构可能如下所示:
CREATE TABLE category
(
id serial not null,
categoryname character varying NOT NULL,
description character varying,
CONSTRAINT category_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE category
OWNER TO postgres;
当然,外键必须引用“id”而不是“categoryname”一般来说,使用varchar列作为主键是个坏主意。在大多数情况下,会添加代理整数PK或SERIAL,并对varchar categoryname列应用唯一约束。这还将在引用类别表时,将具有FKs的其他表减少到此表,以仅使用整数字段。