我这里有一个有趣的问题。我有一个MySql数据库表已链接到其他几个表。例如,“主”表是一组教学材料,以及连接表:
我希望能够更新和更改这些记录。更改主记录很容易,但连接记录呢?例如,假设我有一本教学材料,我原本打算教授动词和形容词,最好用于1 - 4年级。现在稍后,我决定将5级添加到列表中,删除1级,并且该材料实际上更适合教授名词和形容词,但不是动词。
更新成绩和语法表的最佳方法是什么?我不想无意中覆盖我想要保留的数据,也不想保留我想要删除的数据。我是否应该删除与该特定教材相关的所有记录并重新输入,或者是否有其他方法可以将它们编入索引以便更有效地更新?
答案 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