mysql根据另一个表中的列创建表并自动更新

时间:2013-08-10 21:36:04

标签: mysql

我可以在这里写一个“错误的”(mysql的新内容),但我希望我已经解释了我想要做的很好。

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

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

  •   
  • submitId自动递增

  •   

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

  
      
  • 此表将有一个新的自动增量studentId
  •   

我该怎么做才能自动更新第二个表上第一个表的任何新条目,但不会覆盖表2的其他内容。

我想过使用视图,但你不能在视图上添加新列,对吧? 我在这里有错误的逻辑或有什么选择,有人可以指出我正确的方向,谢谢

3 个答案:

答案 0 :(得分:1)

您想要使用触发器。参见:

http://dev.mysql.com/doc/refman/5.6/en/triggers.html

您可以创建触发器,以便当一行插入submissions并且状态为true时,它会在您的新学生表中插入一行。它看起来像这样:

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 ;  

然后创建另一个触发器,以便在提交中更新行时,它会在新表中使用相同的submit_id更新行,如下所示:

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 ;  

答案 1 :(得分:1)

我认为您的数据模型是错误的。请记住,学生我有几个提交,并且可能有许多同名学生。你必须区分它们。 您是否有任何理由要在两个表中复制学生数据? 如果您是SQL的新用户,请先阅读表格规范化。 在你Student表中,你应该存储学生数据,并在Submission表中 - 猜测是什么:)

答案 2 :(得分:1)

您需要做的第一件事是退后一步,从逻辑实体的角度考虑问题。

您已经确定了我可以看到的两个实体 - 学生和提交。 “学生”是一个明显的实体,你可以选择不存储在你的数据库中,但你可能会更好。 “提交”是一个更明显的,但不太明显的是“提交”实际上。我们假设它是某种交易。

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

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

提交表。每次提交一行;包括学生表的外键(引用主键);有自己的主键,也是一个自动递增的整数。还具有为INSERT和UPDATE定义的触发器。 INSERT触发器导致INSERT进入 submission_log 表; UPDATE触发器还会导致INSERT进入 submission_log 表。

Submission_log 表。针对提交表的每个事件占一行。包括提交的所有字段以及其自己的主键(提交的主键是此处的外键),并包含一个指示符字段,表示它是否代表提交的插入或更新>

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