我们有两个名为patron
和cir_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
)?
还是有人不明白我的问题,请问我会详细说明。
答案 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
);
在我看来......应该在主键上移动一点。让更新修改它的价值,不是你认为是一个好的做法,所以我工作的公司的系统,我们不只是这样更新。
我希望我能帮到你!