我想只更新mysql表中的一个字段。
我有一个独特的“ad_id”。
字段“mod_date”是TIMESTAMPS字段,是我需要更新的字段。
UPDATE main_table
SET main_table.mod_date = NOW()
WHERE classified.ad_id = $ad_id";
我还没有测试过这个,因为我担心它可能会更新所有行。
所以我有两个问题:
无论如何阻止MySql更新超过1行?
这个sql代码是否只能更新一行?
由于
答案 0 :(得分:2)
如果ad_id是唯一的,它只会更新一行(如果$ ad_id有效,否则为零)。
如果您担心这样的更新,请将其重写为选择,以确认在运行之前它将对哪些行进行操作。
答案 1 :(得分:2)
您的查询看起来不像它会起作用,因为它检查表ad_id
中尚未在语句中定义的字段classified
。如果这只是一个部分查询,并且您在查询中的某个地方加入classified
表,则此处没有足够的信息来说明将修改多少行。
您可以在查询末尾添加LIMIT 1
,使其仅更新查询找到的第一行,但如果您不确定查询的内容,则第一行可能不是您想要的那一行修改。
作为附注,我不得不说,如果您害怕尝试查看查询的作用,则表示您没有备份数据库或者您正在直接使用生产数据库,这两个选项听起来都很可怕。
答案 2 :(得分:0)
main_table
和classified
之间的关系是什么?
例如......
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只会更新一行。