我想更新一个mysql行,但我不想指定所有列名。 该表有9行,我总是想以正确的顺序更新最后7行。 这些是Fields
id
projectid
fangate
home
thanks
overview
winner
modules.wallPost
modules.overviewParticipant
有没有办法在不指定名字的情况下更新最后几条记录? 使用INSERT语句,可以通过以下方式轻松完成此操作:
INSERT INTO `settings`
VALUES (NULL, ...field values...)
所以我希望我能做到这样的事情:
UPDATE `settings`
VALUES (NULL, ...field values...)
WHERE ...statement...
但不幸的是,这不起作用。
答案 0 :(得分:2)
如果两个第一列构成主键(或唯一索引),则可以使用replace
所以基本上不是写
UPDATE settings
SET fangate = $fangate,
home = $home,
thanks = $thanks
overview = $overview,
winner = $winner,
modules.wallPost = $modules.wallPost,
modules.overviewParticipant = $modules.overviewParticipant
WHERE id = $id AND procjectId = $projectId
你会写
REPLACE INTO settings
VALUES ($id,
$projectId,
$fangate,
$home,
$thanks
$overview,
$winner,
$modules.wallPost,
$modules.overviewParticipant)
当然这仅在行已存在时才有效,否则将被创建。此外,如果重要的话,它将在场景后面引起DELETE和INSERT。
答案 1 :(得分:1)
你做不到。您始终必须指定列名称,因为UPDATE不会编辑整行,而是编辑指定的列。 这是一个UPDATE语法的链接: http://dev.mysql.com/doc/refman/5.0/en/update.html
答案 2 :(得分:1)
否,它适用于INSERT
,因为即使您没有指定列名,但您已在VALUE
子句中提供了所有值。现在,在UPDATE
中,您需要指定值与哪个列名相关联。
UPDATE
语法需要修改的列名。
答案 3 :(得分:1)
您是否始终更新相同的表格和列?
在这种情况下,一种方法是在模式中定义存储过程。 你可以这样做:
CALL update_settings(id, projectid, values_of_last_7 ..);
虽然您必须创建该过程,但请检查Mysql网页以了解如何执行此操作,例如: http://docs.oracle.com/cd/E17952_01/refman-5.0-en/create-procedure.html
答案 4 :(得分:0)
我担心你不能指定列名。