【问题标题】:Best practice MySQL UPDATE/INSERT最佳实践 MySQL UPDATE/INSERT
【发布时间】:2012-03-17 04:42:38
【问题描述】:

免责声明:我没有设计这些表,并且知道它们不是存储这些数据的最佳方式。我需要有关处理这种情况的最佳方法的建议。

我有两个 MySQL 表:

`students`
id        int; primary, unique
prof1_id  varchar 
prof2_id  varchar 
prof3_id  varchar 

`professors`
id         int; primary, unique, auto-increment
username   varchar
fname      varchar
fname      varchar
students_id int
comment    text

教授的用户名可以在students 表的最后三列中的任何一列中。教授需要为students 表中的每个学生提供一条评论。

作为该数据库前端的应用程序需要professors 表中的另外两列:student_id 和comment。由于每个学生的行中可能有任意 3 位教授,因此每当为多个学生列出新行时,都需要将新行添加到 professors。这意味着professors id 字段需要为每个新学生评论自动递增。

使用 MySQL 查询完成此数据传输的最佳方法是什么?我尝试将 UPDATE 与 JOIN 结合使用,但我不确定是否有有效的方法来做到这一点。另外,我是否需要为 professors 创建另一个主键,因为多行将具有相同的 id?

我怀疑 VIEW 可能是完成此任务的最佳方式,但前端的应用程序希望将信息存储在 professors 表中。

我正在考虑的另一件事是,我可以通过连接两个表来创建一个新表,并拥有一个两列的主键,students.id,professor.id。

谢谢!

【问题讨论】:

    标签: mysql sql sql-update sql-view join


    【解决方案1】:

    另外,我是否需要为教授创建另一个主键,因为 多行会有相同的 id 吗?

    是的。这是个好主意。

    我编写了简单的查询,将第一个表中的数据合并到 2 列中。这不是完整的答案,但它可以帮助你很多:

    SELECT id, prof1id as profid
    UNION
    SELECT id, prof2id
    UNION
    SELECT id, prof3id
    UNION;
    

    您可以将其用于查看、插入,但我不熟悉特定的 MySQL 语法,我不想误导您。如果可行,请提供反馈。

    “UNION”删除重复行,您可能需要使用“UNION ALL”来保留重复项(例如 2 或 3 个教授列中的重复值)。

    【讨论】:

    • 谢谢卡米尔,我会调查 UNION。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2012-01-10
    相关资源
    最近更新 更多