1

我想更新一个 mysql 行,但我不想指定所有列名。该表有 9 行,我总是想以正确的顺序更新最后 7 行。这些是字段

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...

但不幸的是,这不起作用。

4

5 回答 5

4

如果前两列构成主键(或唯一索引),您可以使用替换

所以基本上不是写

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。

于 2012-08-30T08:04:39.467 回答
1

你不能。您始终必须指定列名,因为 UPDATE 不会编辑整行,它会编辑指定的列。这是 UPDATE 语法的链接:http: //dev.mysql.com/doc/refman/5.0/en/update.html

于 2012-08-30T07:55:17.643 回答
1

,它适用于 ,INSERT因为即使您没有指定列名但您在VALUE子句中提供了所有值。现在,在 中UPDATE,您需要指定与值关联的列名。

UPDATE语法需要将被修改的列名。

于 2012-08-30T07:55:30.813 回答
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

于 2012-08-30T08:01:10.987 回答
0

恐怕你不能不指定列名。

您可以在此处参考更新文档

于 2012-08-30T07:56:43.590 回答