mysql基于另一个表中的列创建表并自动更新

mysql基于另一个表中的列创建表并自动更新,mysql,Mysql,我可能在这里用了“错误”的措词(mysql的新版本),但我希望我已经解释了我想要做好的事情 我有一个名为submissions的表,其中包含4个字段submitId、studentName、submitDate和status 状态是指他们是否被录取 submitId是自动递增的 现在我想在此基础上创建另一个表,但只有当状态为true时,这个新表才会有submitId、studentName、submitDate以及其他字段 此表将有一个新的自动递增studentId 我该如何做才能使

我可能在这里用了“错误”的措词(mysql的新版本),但我希望我已经解释了我想要做好的事情

我有一个名为submissions的表,其中包含4个字段submitId、studentName、submitDate和status

  • 状态是指他们是否被录取

  • submitId是自动递增的

现在我想在此基础上创建另一个表,但只有当状态为true时,这个新表才会有submitId、studentName、submitDate以及其他字段

  • 此表将有一个新的自动递增studentId
我该如何做才能使它自动更新第二个表中第一个表的任何新条目,但不会覆盖表2的其他内容

我想使用一个视图,但是你不能在视图上添加新的列,对吗?
我的逻辑是否有误,或者有哪些选项,请有人给我指出正确的方向,谢谢你想使用触发器。见:

您可以创建触发器,以便在status=true的
submissions
中插入一行时,它会将一行插入到新的学生表中。它看起来像这样:

delimiter //
CREATE TRIGGER sub_ins_check AFTER INSERT ON submissions
     FOR EACH ROW
     BEGIN
         IF NEW.status = 1 THEN
           INSERT INTO your_new_table (student_name, submit_date, submit_id) VALUES (NEW.student_name, NEW.submit_date, NEW.submit_id);
         END IF;
     END;//
delimiter ;  
delimiter //
CREATE TRIGGER sub_ins_check AFTER UPDATE ON submissions
     FOR EACH ROW
     BEGIN
         IF NEW.status = 1 THEN
           UPDATE your_new_table SET student_name = NEW.student_name, submit_date = NEW.submit_date, (etc..)) WHERE submit_id = NEW.submit_id;
         END IF;
     END;//
delimiter ;  
然后创建另一个触发器,以便在提交中更新行时,它使用新表中相同的提交id更新该行,如下所示:

delimiter //
CREATE TRIGGER sub_ins_check AFTER INSERT ON submissions
     FOR EACH ROW
     BEGIN
         IF NEW.status = 1 THEN
           INSERT INTO your_new_table (student_name, submit_date, submit_id) VALUES (NEW.student_name, NEW.submit_date, NEW.submit_id);
         END IF;
     END;//
delimiter ;  
delimiter //
CREATE TRIGGER sub_ins_check AFTER UPDATE ON submissions
     FOR EACH ROW
     BEGIN
         IF NEW.status = 1 THEN
           UPDATE your_new_table SET student_name = NEW.student_name, submit_date = NEW.submit_date, (etc..)) WHERE submit_id = NEW.submit_id;
         END IF;
     END;//
delimiter ;  

我认为你的数据模型是错误的。请记住,我的学生有几份意见书,可能有许多学生同名。你必须区分它们。 是否有任何原因需要在两个表中复制学生数据? 如果您是
SQL
新手,请先阅读表规范化的相关内容。
在<<代码>学生< /代码>表中,你应该存储学生数据,在提交< <代码>表>猜测什么:

你首先要做的是退一步,从逻辑实体的角度考虑这个问题。

您已经确定了我可以看到的两个实体-学生和提交。“学生”是一个明显的实体,您可以选择不将其存储在数据库中,但最好这样做。“提交”是一个更明显的概念,但不那么明显的是“提交”实际上是什么。让我们假设这是某种交易

您提到了“第二个表”,但没有明确指出它在解决方案中的作用。我能推断出的最好的结果是,这意味着它是针对提交的活动的某种历史线索。如果是真的,那么我可以设想一个物理模式,如下所示:

学生表格。每名学生一排;包含有关学生的信息(姓名、id等)。主键可能是一个自动递增的数字

提交表格。每次提交一行;包括学生表的外键(参考主键);有自己的主键,也是一个自动递增的整数。还定义了用于插入和更新的触发器。插入触发器导致插入提交日志表;更新触发器也会导致插入到提交日志表中

提交日志表格。针对提交表,每个事件一行。包括提交的所有字段以及它自己的主键(提交的主键在这里是外键),并包括一个指示符字段,用于指示它是表示插入还是更新提交


上述内容的目的不是提供解决方案,甚至不是提供解决方案的框架,而是让您根据要在解决方案中建模的逻辑实体以及它们之间的关系进行思考。当您对逻辑模型有了清晰的了解后,就可以更容易地确定需要哪些表、它们的角色是什么、它们将如何使用以及它们将如何相互关联。

听起来您想在提交表上实现某种触发器,但不清楚具体的条件是什么。i、 e.插入?更新?对于第二个表,将是什么操作-插入?更新?当状态改变时,更新。现在我试图为地址、电子邮件和链接添加新列,然后添加到表2tanks@ireder就是这样,现在更进一步,在提交表上说我有一个联系人和电子邮件列,然后我可以将链接列添加到新表中,以便在发生更改时更新所有内容。我该怎么做?@Ireeded它的行为不符合预期,它只是不断添加,我该如何检查提交id是否已经存在,并且仅在不存在时添加?因为这样我就有了副本,所以您可以在插入时创建一个新触发器,以在新表中创建初始记录,并在我的示例中在更新时修改触发器,以更新新表中的行,其中new.submit\u id=submit\u id使用任何更新的列。我已经更新了我的答案Thanky@Wirus我欢迎评论,表规范化是我一直试图理解的事情之一,我的想法是,提交将在线完成,所以将所有内容放在一个表中(通过php)会更容易,一旦它们被接受,就会添加额外的信息,studentId将用于实际的student ID,因此我需要自动递增,这也给了我一个“干净”的表,其中只包含要处理的相关数据。但如果你能详细说明,我将不胜感激,也许你的权利和我可以做得更好。谢谢让我了解你的情况。提交的是研究领域的申请,对吗?若有人接受服从,那个么这个人就是学生。我是对的吗?是的,你是对的,我花了很长时间仔细思考,你是对的,模型是错误的(nooberror…lol),因为一个学生可能会提交不同的课程,例如,所以我想h