mysql - 如何编写强制外键的触发器

标签 mysql database triggers foreign-keys

我有一个表名称 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/

相关文章:

mysql - 如何返回多个特定值

php - 保存具有不可空关系的模型

java - 在 SELECT 查询中从 JOIN 复制 BLOB 值是否会显着影响性能?

Hibernate 事务边界

sqlite - sqlite触发器中的条件插入语句

mysql - PHP MYSQL - 返回不相同的值

sql - 现代 DBMS 是否包括短路 bool 值评估?

MySQL ERROR 1064 原因(LOAD DATA INFILE)

mysql - 更新前触发会导致错误 #1442

php - 将 PHP 连接到 mySQL 并检索数据