Mysql 从另一个表更新问题创建表
当我在表a中插入一条记录时,它不会更新从表a派生的表B。我使用了where子句,因为我只需要表B中表a的某些记录。这是我的代码 将表B创建为 从列表中选择* 学生在哪里 ; 当使用新属性student将新记录插入表a时,它不会更新表B。谢谢 您的语句:将表B创建为SELECT*FROM A WHERE STATUS='STUDENT';只需使用SELECT语句生成的结构创建一个表,然后将该语句的结果复制到新表中。它不会保持原始表的最新匹配。如果您想要查看视图,则可能需要查看视图 您可以尝试:Mysql 从另一个表更新问题创建表,mysql,sql,sql-server,Mysql,Sql,Sql Server,当我在表a中插入一条记录时,它不会更新从表a派生的表B。我使用了where子句,因为我只需要表B中表a的某些记录。这是我的代码 将表B创建为 从列表中选择* 学生在哪里 ; 当使用新属性student将新记录插入表a时,它不会更新表B。谢谢 您的语句:将表B创建为SELECT*FROM A WHERE STATUS='STUDENT';只需使用SELECT语句生成的结构创建一个表,然后将该语句的结果复制到新表中。它不会保持原始表的最新匹配。如果您想要查看视图,则可能需要查看视图 您可以尝试: C
CREATE VIEW B AS SELECT * FROM A WHERE STATUS = 'STUDENT';
如果你想,你可以通过创建一个带有触发器的触发器来实现自动化。当你将行插入表a时,信息被输入表B。我尽了最大努力,但条件是你可能需要稍微调整ir。INSERTED在触发器中用作VLUE INSERTED
CREATE TRIGGER MyTrigger
ON DBO.TableA
AFTER INSERT, UPDATE
AS
IF EXITS (SELECT *
FROM TABLE_B
WHERE (SELECT STATUS
FROM INSERTED I
WHERE STATUS = STUDENT))
BEGIN
INSERT INTO TableB
SELECT *
FROM INSERTED I
WHERE STATUS='STUDENT'
END
ELSE
RAISEERROR('ROW IS NOT A STUDENT');
正如@rabbit所说,Is将是更好的实践,因为它创建了一个包含所需数据的视图,现在另一个表的视图将实时获取您所需的一切:
CREATE VIEW MyView
AS
SELECT * FROM A WHERE STATUS='STUDENT'
您基本上将视图创建为另一个表,并在需要时调用它,它将实时查询您需要的数据。如果需要,你可以像桌子一样使用它
CREATE TABLE B AS ( SELECT * FROM A WHERE STATUS='STUDENT' );
此查询只运行一次,运行时将在A到B中插入当时存在的记录。这将按预期工作
如果希望每次在a中插入一条新记录并在B中输入一些数据,请使用触发器。触发器在触发eventstrigger_事件(如插入、更新、删除)之前或之后自动执行
有关触发器的详细信息,请参阅mysql或sql server?首先,这是mysql或sql server底部的标记相互矛盾不同的系统运行sql的方式不同。为什么要这样复制数据?这打破了规范化规则,如果您想要一个只列出学生的单独的表,只需使用一个视图。我创建这样一个表的原因是,只有当status=studentIt听起来像时,表a才在表C中有一个外键,除非这是一个继承的数据库,您应该重新检查您的需求并更改数据库的结构。您不应该有条件外键。