Mysql 具有自动触发器的SQL继承
所以我的问题是,我不知道怎么做 我有一个表Mysql 具有自动触发器的SQL继承,mysql,sql,database,inheritance,triggers,Mysql,Sql,Database,Inheritance,Triggers,所以我的问题是,我不知道怎么做 我有一个表Product,它包含productid和各种其他属性。 我还有表衣服,它有属性大小,还有属性颜色。 服装不具有属性颜色,accesoire不具有属性尺寸,两者都从表产品继承 现在我想这样做,当我插入产品,类型为衣服,触发器将自动在衣服中插入一个条目。 但是,如果插入产品,则无法将属性大小传递到数据库,因为产品表没有此属性 因此,我的问题基本上是,如何在超类型中使用触发器插入子类型,其中子类型还需要填充其特定属性 谢谢你的阅读 您是对的,Product表
Product
,它包含productid
和各种其他属性。
我还有表衣服
,它有属性大小
,还有属性颜色
。
服装
不具有属性颜色
,accesoire
不具有属性尺寸
,两者都从表产品
继承
现在我想这样做,当我插入产品
,类型为衣服
,触发器将自动在衣服
中插入一个条目。
但是,如果插入产品
,则无法将属性大小
传递到数据库,因为产品
表没有此属性
因此,我的问题基本上是,如何在超类型中使用触发器插入子类型,其中子类型还需要填充其特定属性
谢谢你的阅读 您是对的,
Product
表中的触发器将无法使用额外的子类型数据,除非您向Product添加额外的列(即,更改继承模型以使用表/层次结构,而不是表/类方法)
但是,我认为触发器并不是将数据主要插入子类表Clothing
和Accesoire
的正确方法
我建议您通过存储过程将数据插入封装到三个表中,例如:
CREATE PROCEDURE InsertProduct(IN name VARCHAR(20), IN type CHAR(1),
IN size INT, IN color VARCHAR(20))
BEGIN
DECLARE newID INT;
INSERT INTO Product(Name, Type) VALUES(Name, Type);
SET newID = LAST_INSERT_ID();
IF (type = 'C') THEN
INSERT INTO Clothing(ProductID, Size) VALUES(newID, size);
ELSE
INSERT INTO Accesoire(ProductID, Color) VALUES(newID, color);
END IF;
END;
此处在触发器内部,大多数RDBMS通常为插入/新版本和传出/旧版本的数据提供伪行-您可以使用这些行中的适用键连接回数据库中的其他表,并检索触发器插入所需的数据。如果你可以更具体一些,我们也可以:)-例如,哪个Sql RDBMS(MySql、Oracle、SqlServer等)?非常感谢stuart!这确实帮助我理解了存储过程和触发器!