更新如果重复插入?在INSERT上自动增加PK?

时间:2012-02-27 19:35:10

标签: mysql sql sql-update sql-insert

给出两个表:

`Students`
id         int, primary, auto-increment
sid        int
fname      varchar
lname      varchar


`Registration`
id          int, primary, auto-increment
student_sid int
coursenum   int

有没有办法在Students中使用他们注册的每个类的coursenum填充新列?因此,每次为给定的sid添加第二个coursenum时,students.id将自动递增,保留主键,而带有sid,fname,lname和new coursenum的新行将添加到表中。

它有点像INSERT的倒退版本......如果重复更新。我想要UPDATE ...如果DUPLICATE INSERT。

1 个答案:

答案 0 :(得分:1)

也许你可以这样做(见下面的注释):

    $result = mysql_query("SELECT DISTINCT student_sid from Registration");
while (list($studentID) = mysql_fetch_row($result))
{
    $result2 = mysql_query("SELECT fname, lname FROM Students WHERE sid = '{$studentID}'");
    list($fname, $lname) = mysql_fetch_row($result2);

    mysql_query("DELETE FROM Students WHERE sid = '{$studentID}'");
    mysql_query("INSERT INTO Students (sid, fname, lname, coursenum) SELECT '{$studentID}', '{$fname}', '{$lname}', coursenum FROM Registration WHERE student_sid = '{$studentID}'");
}

这里有几点说明:

  1. 此代码未经过测试,但我认为它应该可以正常运行。
  2. 这不会保留id表中的原始Students列。它将获取名字和姓氏,然后删除学生,并为Registration表中的每个条目插入一个新行。它会保留sidfnamelname,并会填充新列coursenum
  3. 这也假设您已经更改了Students表格以包含coursenum列。
  4. 根据你在这里谈论的学生和课程的数量,这段代码可能不是世界上最快的,但我认为这不是经常做的事情......更多的是一次性迁移的事情。
  5. 希望这可以帮到你。