更新具有依赖关系的行

时间:2015-11-02 05:09:03

标签: sql postgresql

我们有两个名为patroncir_transaction的表。

patron表中,一列名为patron_id(主键)我只是用其他名称更新patron_id的数据, 现在我必须写一个查询

update patron set patron_id=" " where patron_id="" like....
**original query**:(update patron set patron_id='" + patronIdTrim + "' where patron_id='" + patronId + "' and library_id=" + SimpleUtility.getLibraryId()));

但在执行时显示

  

更新或删除表“patron”违反表“cir_transaction

上的外键约束”fk_111“

我也首先尝试更新patron_id表格中的特定cir_transaction,如:

 update cir_transaction set patron_id='" + patronIdTrim + "' where patron_id='" + patronId + "' and library_id=" + SimpleUtility.getLibraryId());

它显示如下错误:

  

在表“cir_transaction”上插入或更新违反外键约束“fk_111”

那么现在告诉我如何在两个表中更新这些行(patron_id)? 还是有人不明白我的问题,请问我会详细说明。

1 个答案:

答案 0 :(得分:0)

如另一位用户所评论,您必须使用" UPDATE CASCADE"同时更新所有引用的表。

以下是如何制作表格结构的示例:

--main table
CREATE TABLE script_cadastro
(
    cd_sequencia integer NOT NULL DEFAULT 0,
    nr_atividade integer NOT NULL DEFAULT 0,
    nm_script character varying(100) NOT NULL DEFAULT ''::character varying,
    nr_versao character varying(10) NOT NULL DEFAULT ''::character varying,
    observacao character varying(1000) NOT NULL DEFAULT ''::character varying,
    script_conteudo character varying(5000) NOT NULL DEFAULT ''::character   varying, 
    dt_cad date NOT NULL DEFAULT '1900-01-01'::date,
    hr_cad time without time zone NOT NULL DEFAULT '00:00:00'::time without time zone,
    CONSTRAINT script_cadastro_pk PRIMARY KEY (cd_sequencia)
);

--table with foreign key
CREATE TABLE script_cadastro_itens
(
   cd_sequencia  INTEGER NOT NULL DEFAULT 0                      ,
   versao_script VARCHAR(200) NOT NULL DEFAULT ''                ,
   usuario       INTEGER NOT NULL DEFAULT 0                      ,
   dt_cad        DATE NOT NULL DEFAULT '1900-01-01'              ,
   hr_cad        TIME NOT NULL DEFAULT '00:00:00'                ,
   CONSTRAINT script_cadastro_itens_pk PRIMARY KEY (cd_sequencia),
   CONSTRAINT script_cadastro_itens_fk FOREIGN KEY (cd_sequencia) REFERENCES    script_cadastro (cd_sequencia) 
   ON UPDATE CASCADE 
   ON DELETE RESTRICT
 );

在我看来......应该在主键上移动一点。让更新修改它的价值,不是你认为是一个好的做法,所以我工作的公司的系统,我们不只是这样更新。

我希望我能帮到你!