Php 连接mysql表与更新多个表

Php 连接mysql表与更新多个表,php,mysql,join,Php,Mysql,Join,假设我在mysql中有两个表。 1.人员(id、姓名、姓氏)- 2.someothertable(id、名称、姓氏、操作、数量)—— 我想问一下,如果这真的是一种糟糕的做法,那就是同时更新两个表?例如,如果有人将Robert Jackson的姓更新为“Smith”,则执行2个查询: mysql_query("UPDATE person SET lastname = '$lastname' WHERE id = '$id'"); mysql_query("UPDATE someothertable

假设我在mysql中有两个表。
1.人员(id、姓名、姓氏)-
2.someothertable(id、名称、姓氏、操作、数量)——

我想问一下,如果这真的是一种糟糕的做法,那就是同时更新两个表?例如,如果有人将Robert Jackson的姓更新为“Smith”,则执行2个查询:

mysql_query("UPDATE person SET lastname = '$lastname' WHERE id = '$id'");
mysql_query("UPDATE someothertable SET lastname = '$lastname' WHERE name = '$name' AND lastname = '$oldlastname'");
假设现在,你不会遇到两个相同的名字和姓氏(这只是一个例子)。 是否强烈建议在显示表中的数据时连接这两个表,并仅在
person
表中更改姓氏


我以前不需要使用
join
(从来没有足够大的数据库),我开始怀疑是否有其他方法可以做到这一点(除了两个查询)。使用
join
将需要一些代码更改,但如果这样做是正确的,我准备这样做。

一个选项是使
其他表
Person
中的
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;
这可以应用于任何表中的任何字段。然后可以将触发器设置为适合您。是一个参考链接

您考虑过标准化吗?

另一个选项是为
person
表中的每个
person
分配一个唯一的ID(即
PersonID
)。现在,在所有其他表中,如果引用的是
人员,则通过唯一id引用他们。这增加了许多优点:

1) 它使数据保持规范化 2) 它保持数据的完整性 3) 不需要更新、触发器或级联 4) 只需要在一个地方进行更改


希望这有帮助。祝你好运

一个选项是使
someothertable
Person
中的
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;
这可以应用于任何表中的任何字段。然后可以将触发器设置为适合您。是一个参考链接

您考虑过标准化吗?

另一个选项是为
person
表中的每个
person
分配一个唯一的ID(即
PersonID
)。现在,在所有其他表中,如果引用的是
人员,则通过唯一id引用他们。这增加了许多优点:

1) 它使数据保持规范化 2) 它保持数据的完整性 3) 不需要更新、触发器或级联 4) 只需要在一个地方进行更改


希望这有帮助。祝你好运

不使用2更新,您可以使用触发器:

不使用2更新,您可以使用触发器:

使用
连接
不是数据库有多大的函数,而是关于规范化和数据完整性。只有一个表中有
lastname
,这样就不必担心保持值同步。在您的示例中,如果这些调用在单个事务中,那么它们应该保持同步。除非其中一个在其他地方更改,或者在数据库中手动更改

因此,您可以选择使用以下表格:

person (id, name, lastname)
someothertable (id, person_id, action, quantity)

使用
join
不是数据库有多大的函数,而是关于规范化和数据完整性。只有一个表中有
lastname
,这样就不必担心保持值同步。在您的示例中,如果这些调用在单个事务中,那么它们应该保持同步。除非其中一个在其他地方更改,或者在数据库中手动更改

因此,您可以选择使用以下表格:

person (id, name, lastname)
someothertable (id, person_id, action, quantity)

我建议你读这个:我建议你读一个存储过程我建议你读这个:我建议你读一个存储过程