2015-11-02 111 views
0

我們有兩個表名爲patroncir_transaction更新行有依賴關係

名爲patron_id(主鍵),其patron表,一列我剛更新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())); 

但在執行它顯示

更新或刪除表「靠山」違反了表的外鍵約束「fk_111」「cir_transaction

我必須先更新特定patron_idcir_transaction表像過嘗試:

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

它表明類似的錯誤:

表「cir_transaction」插入或更新違反外鍵約束「fk_111 「

那麼現在告訴我如何在這兩個表中更新這些行(patron_id)? 還有人不明白我的問題請問我會詳細講述。

+0

使用'ON UPDATE CASCADE'外鍵。有關詳細信息,請參閱Google和堆棧溢出搜索。 –

+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 
); 

在我看來......應在主鍵移動一點。讓更新修改它的價值,以示例說明你並不認爲這是一種好的做法,這樣我工作的公司的系統就不會像這樣更新。

我希望我幫你!