这个sql代码会正确更新吗?

时间:2010-11-13 11:30:38

标签: php sql mysql database

我想只更新mysql表中的一个字段。

我有一个独特的“ad_id”。

字段“mod_date”是TIMESTAMPS字段,是我需要更新的字段。

UPDATE main_table
SET main_table.mod_date = NOW()
WHERE classified.ad_id = $ad_id";

我还没有测试过这个,因为我担心它可能会更新所有行。

所以我有两个问题:

无论如何阻止MySql更新超过1行?

这个sql代码是否只能更新一行?

由于

3 个答案:

答案 0 :(得分:2)

如果ad_id是唯一的,它只会更新一行(如果$ ad_id有效,否则为零)。

如果您担心这样的更新,请将其重写为选择,以确认在运行之前它将对哪些行进行操作。

答案 1 :(得分:2)

您的查询看起来不像它会起作用,因为它检查表ad_id中尚未在语句中定义的字段classified。如果这只是一个部分查询,并且您在查询中的某个地方加入classified表,则此处没有足够的信息来说明将修改多少行。

您可以在查询末尾添加LIMIT 1,使其仅更新查询找到的第一行,但如果您不确定查询的内容,则第一行可能不是您想要的那一行修改。

作为附注,我不得不说,如果您害怕尝试查看查询的作用,则表示您没有备份数据库或者您正在直接使用生产数据库,这两个选项听起来都很可怕。

答案 2 :(得分:0)

main_tableclassified之间的关系是什么?

例如......

UPDATE header h
   INNER JOIN detail d ON d.id_header = h.id_header
SET h.name = 'New name'
WHERE d.id_detail = 10

将更新name表格中header的特定id_detail。{/ p>

如果ad_id是唯一的,那么您可以确定MySQL只会更新一行。