更新作为主键的列值

时间:2014-05-02 06:36:26

标签: postgresql

我想在这里更新类别表。在jsp中 代码如下:

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表在此处引用了外键。 感谢。

1 个答案:

答案 0 :(得分:0)

是的,您可以更改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'