加入mysql表与更新多个表
可以说我在mysql中有两个表。
1人(ID,姓名,姓) - Image
2. someothertable(ID,姓名,姓氏,行动,数量) - 我想问问image加入mysql表与更新多个表
,如果它真的是不好的做法,同时更新桌子一次?例如,如果有人更新罗伯特·杰克逊的姓氏“史密斯”然后做2个查询:
mysql_query("UPDATE person SET lastname = '$lastname' WHERE id = '$id'");
mysql_query("UPDATE someothertable SET lastname = '$lastname' WHERE name = '$name' AND lastname = '$oldlastname'");
假设现在,你不会满足2个相同名字和姓氏(它只是一个例子)。 是否推荐当从表格中显示数据时加入这两个表格,并且仅在person
表格中更改姓氏?
之前我没有必要使用join
(从来没有足够的数据库),我只是开始怀疑是否有另一种方法来做到这一点(比2个查询)。使用join
将需要更改一些代码,但我准备好了,如果它正确的话。
使用join
是不是你的数据库有多大的功能,它是关于标准化和数据完整性。只有一张表中有lastname
的原因是,不需要担心保持值同步。在你的例子中,如果这些调用是在单个事务中,那么它们应该保持同步。除非其中一个在别处更改,或者在数据库中手动更改。
所以你的选择是有这些表:
person (id, name, lastname)
someothertable (id, person_id, action, quantity)
一种选择是使someothertable
对的lastname
字段具有外键约束。您可以应用更新触发器,以便自动级联。
这里是下面的例子:
Alter table someothertable add constraint foreign key (lastname) references Person (lastname) on delete cascade on update cascade;
这方面的一个通用版本可在下面看到:
Alter table [table-name] add constraint foreign key (field-in-current-table) references [other-table-name] (field-in-other-table) on delete cascade on update cascade;
这可以以任何表被应用于任何领域。然后,您可以将触发器设置为适合您。 Here是参考链接。
您是否考虑过正常化?
另一种选择是为Person
表中的每个person
分配唯一的ID(即PersonID
)。现在在你参考person
的所有其他表格中,你可以通过唯一的ID来引用它们。这增加了许多优点:
1)它使数据规范化 2)保持数据完整性 3)无需更新,触发器或级联 4)的变化将只在一个地方
要求希望这有助于。祝你好运!
我建议你阅读本:http://en.wikipedia.org/wiki/Database_normalization – Ranty 2013-02-15 16:41:34
我会推荐一个存储过程 – jcho360 2013-02-15 16:42:09