我想总是替换相同的现有数据库条目。
下面的代码总是创建一个新条目,我如何修改它总是覆盖"version"?
$sql = "REPLACE INTO `traumprojekt`
(`version`, `geschlecht`, `alter`, `fuehrerschein`)
VALUES(
'" .mysql_real_escape_string( $version ). "',
'" .mysql_real_escape_string( $geschlecht ). "',
" .$alter. ",
" .$fuehrerschein. "
)";
mysql_query( $sql );
REPLACE只是一个插入,它会在添加新行之前"删除"旧行。
只有当约束条件将新行标记为"存在"时,它才能确定"旧"行。
您的替换语句是可以的,但是您应该在geschlecht
, alter
, fuehrerschein
上添加一个UNIQUE INDEX,以便它可以更改版本。
另一种选择可以是INSERT ... ON DUPLICATE KEY UPDATE
,但是您也需要一个惟一的键。区别在于REPLACE先执行DELETE,然后执行INSERT;while INSERT…ON DUPLICATE KEY UPDATE执行UPDATE操作而不是INSERT操作。比如触发器
我个人倾向于使用UPDATE。例如:
REPLACE INTO `traumprojekt`
(`version`, `geschlecht`, `alter`, `fuehrerschein`)
VALUES(
'" .mysql_real_escape_string( $version ). "',
'" .mysql_real_escape_string( $geschlecht ). "',
" .$alter. ",
" .$fuehrerschein. "
)
WHERE
/* Your condition here */;
在一些列上创建唯一键。这样,脚本将在没有数据时插入一次,然后在列键重复时更新。假设您在版本列上创建一个唯一索引:
$sql = "INSERT INTO `traumprojekt`
(`version`, `geschlecht`, `alter`, `fuehrerschein`)
VALUES(
'" .mysql_real_escape_string( $version ). "',
'" .mysql_real_escape_string( $geschlecht ). "',
" .$alter. ",
" .$fuehrerschein. "
) ON DUPLICATE KEY UPDATE
`geschlecht`='" .mysql_real_escape_string( $geschlecht ). "',
`alter`=" .$alter. ", `fuehrerschein`= " .$fuehrerschein;
或者,如果你想在你的表中只有一条记录,那么你可以创建一个唯一的列Id作为TinyINT,并基于它的逻辑:
$sql = "INSERT INTO `traumprojekt`
(`id`,`version`, `geschlecht`, `alter`, `fuehrerschein`)
VALUES(1,
'" .mysql_real_escape_string( $version ). "',
'" .mysql_real_escape_string( $geschlecht ). "',
" .$alter. ",
" .$fuehrerschein. "
) ON DUPLICATE KEY UPDATE
`version`='" .mysql_real_escape_string( $version ). "',
`geschlecht`='" .mysql_real_escape_string( $geschlecht ). "',
`alter`=" .$alter. ", `fuehrerschein`= " .$fuehrerschein;
MySQL文档http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html