gpt4 book ai didi

php - 是否可以为这个作业 : select, 编写一个 sql 查询然后比较然后插入/更新

转载 作者:行者123 更新时间:2023-11-28 23:16:33 24 4
gpt4 key购买 nike

我要处理 MariaDB 中的一张表,用于记录学生的成绩。当学生发送新成绩时,我需要首先检查表格中是否存在学生记录,如果有,则更新新成绩是否高于现有成绩。如果表中不存在学生,则作为新记录插入。

以下是我的 PHP 代码(为简单起见,假设学生的名字是 John,他的新成绩是 100,$connmysqli 对象):

$result =  $conn->query("select name, grade from grade_sheet where name='john' and grade<100");

if ($result->num_rows > 0) {
$conn->query("update grade_sheet set grade=100 where name='john'");
} else {
$conn->query("insert into grade_sheet (name, grade) values ('john', 100)");
}

是否可以简化代码?更具体地说,是否可以使用 insert ... on duplicate key update

这里的 name 是主键。是不是最坏的情况下,上面的代码需要查表两次?

最佳答案

与评论中提到的相反,这是错误的方法,您想要更改它是正确的。你应该改变它的原因是为了避免竞争条件,另一个线程可能会修改你的两个查询之间感兴趣的记录。

如果您有一个合适的索引,性能方面不会有太大差异,但如果您正在执行此类查询,则可能不会。您应该在此表上有一个自动递增主键,并使用该列而不是“John”来引用它,这不太可能是唯一的。然后应该有一个记录学生姓名的学生表的外键

然后您可以使用 INSERT ... ON DUPLICATE KEY UPDATE 在单个查询中完成工作。安全地。

关于php - 是否可以为这个作业 : select, 编写一个 sql 查询然后比较然后插入/更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43647151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com