如何使用其他表中连接的多个记录更新MySql数据库中的记录?

时间:2012-02-25 07:42:39

标签: mysql join database-design sql-update

我这里有一个有趣的问题。我有一个MySql数据库表已链接到其他几个表。例如,“主”表是一组教学材料,以及连接表:

  • 材料瞄准的等级;
  • 语法指出材料最适合用于;
  • 与资料相关的关键字

我希望能够更新和更改这些记录。更改主记录很容易,但连接记录呢?例如,假设我有一本教学材料,我原本打算教授动词和形容词,最好用于1 - 4年级。现在稍后,我决定将5级添加到列表中,删除1级,并且该材料实际上更适合教授名词和形容词,但不是动词。

更新成绩和语法表的最佳方法是什么?我不想无意中覆盖我想要保留的数据,也不想保留我想要删除的数据。我是否应该删除与该特定教材相关的所有记录并重新输入,或者是否有其他方法可以将它们编入索引以便更有效地更新?

2 个答案:

答案 0 :(得分:0)

在MySQL中,您可以通过外键链接表。也就是说,您拥有共享这些密钥的连接记录。然后,根据您实例化表的方式,在更新一个表中的值时可以使用CASCADE。从the manual on MySQL开始,当您定义此外键时,可以按如下方式设置CASCADE

[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]

reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION

其中:

  

CASCADE:从父表中删除或更新行,并自动删除或更新子表中的匹配行。支持ON DELETE CASCADE和ON UPDATE CASCADE。在两个表之间,不要定义几个ON UPDATE CASCADE子句,这些子句作用于父表或子表中的同一列。

默认情况下,此引用选项设置为No Action

答案 1 :(得分:0)

我有两个表名为Vendor,另一个名为Inventory

++++++++++++++

 +Vendor

++++++++++++++

 +Vendor_ID 
 +Vendor_Name

 ++++++++++++++ 

 +++++++++++++++

 +Inventory

 +++++++++++++++

 +Description

 +endor_Name

 +Price

 +Weight

 +++++++++++++++ 

目前两个表中的Vendor_Name具有相同的值,因此我可以

SELECT Vendor.Vendor_ID 
 FROM Vendor, Inventory 
 WHERE Vendor.Vendor_Name = Inventory.Vendor_Name