我有一个表名称 Service(product, loca, from_agent, to_agent)。
产品引用产品(pno)
from_agent 引用客户(cno) U 司机(drno) U 航空公司(Ano)
to_agent 引用客户(cno) U 司机(drno) U 航空公司(ano)
cno = 客户编号,这是另一个表名称“客户”,其中包含其他详细信息,例如姓名、地址等
drno = 驾驶员编号,这是另一个表名称“Driver”,其中包含姓名、地址等其他详细信息
ano = 航空公司编号,这是另一个表名称“航空公司”,其中包含其他详细信息,例如出发、出发时间、到达时间等。
想要编写一个触发器,在进行任何更改之前强制检查产品表中的外键。假设局部映射透明
请帮忙,我正在学习触发器和分发数据库
最佳答案
让我们想象一个商店的数据库:商品、产品、品牌(例如:“带条纹的黄色标致自行车”,引用为“标致自行车”的商品,作为“标致”的品牌。
CREATE TABLE IF NOT EXISTS `brands` (
`brandId` int(11) NOT NULL AUTO_INCREMENT,
`brandName` varchar(30) NOT NULL,
PRIMARY KEY (`brandId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
CREATE TABLE IF NOT EXISTS `items` (
`itemId` int(11) NOT NULL AUTO_INCREMENT,
`generalProductId` int(11) NOT NULL,
PRIMARY KEY (`itemId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `products` (
`productId` int(11) NOT NULL AUTO_INCREMENT,
`productName` varchar(200) NOT NULL,
`productBrand` int(11) NOT NULL,
PRIMARY KEY (`productId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
ALTER TABLE products ADD FOREIGN KEY(productBrand) REFERENCES brands(brandId) ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE items ADD FOREIGN KEY(itemBrand) REFERENCES product(productBrand) ON DELETE RESTRICT ON UPDATE CASCADE;
因此,这里有一个外键约束,它使 Items 继承 Product 中指定的品牌,而 Product 又继承自 Brands。在这种情况下,如果您修改特殊 BrandId 的名称,子表将知道这一点。 ON DELETE RESTRICT 意味着您无法打破链条,数据库将不允许您删除在其他地方引用的条目:)
关于mysql - 如何编写强制外键的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19604661/