基本上,我有两张桌子:
- ITEM_MASTER - srno(主键),名称(唯一键)
- SELL_RECORD - bill_no(主键),名称(ITEM_MASTER的外键)
醇>
现在,如果我想更新ITEM_MASTER中的名称,外键将发生冲突。 我做的是:
//adding a new record with new name
INSERT INTO ITEM_MASTER VALUES('srno * -1', new_name)
//update sell record with new name
UPDATE SELL_RECORD SET name = 'new_name' WHERE name = 'old_name'
//deleted the record with old name
DELETE FROM ITEM_MASTER WHERE name = 'old_name'
//restored the original srno
UPDATE ITEM_MASTER SET srno = 'srno * -1' WHERE name = 'new_name'
这件事有效。我想问的是,有什么简单的方法吗? 例如,我可以这样做:
UPDATE ITEM_MASTER, SELL_RECORD SET
ITEM_MASTER.name = 'new_name',
SELL_RECORD.name = 'new_name'
WHERE SELL_RECORD.name = 'old_name' AND ITEM_MASTER.name = 'old_name' AND ITEM_MASTER.name = SELL_RECORD.name
有点像吗? 提前致谢!
答案 0 :(得分:0)
你可以尝试这个:
Create table ITEM_MASTER
(
smo varchar(20) Primary key,
name varchar(20) Unique
)
Create table SELL_RECORD
(
bill_no varchar(20) Primary key,
name varchar(20) FOREIGN KEY REFERENCES ITEM_MASTER(name) on update cascade
)
Update ITEM_MASTER set name='new_name' where name='old_name'
您的子表SELL_RECORDS将会更新。
答案 1 :(得分:0)
如果您只是在引用srno
(主键)时使用正确的外键,则可以随意更新name
(除非违反唯一约束)。