我有一个左连接查询,显示主表(tblMarkers)中的所有字段和第二个表(tblLocations)中存在匹配记录的值。 tblLocations没有tblMarkers中每个id的记录
$query ="SELECT `tblMarkers`.*,`tblLocation`.*,`tblLocation`.`ID` AS `markerID`
FROM
`tblMarkers`
LEFT JOIN `tblLocation` ON `tblMarkers`.`ID` = `tblLocation`.`ID`
WHERE
`tblMarkers`.`ID` = $id";
我很乐意使用UPDATE来更新tblMarkers字段,但如果tblLocations中还没有记录,如何将记录更新或插入到tblLocations中。
另外,如何锁定我正在处理的记录以防止其他人同时进行更新?
我还可以使用UPDATE tblMarkers *还是必须列出UPDATE语句中的每个字段?
答案 0 :(得分:0)
不幸的是,您可能必须在外部脚本中实现一些验证。 SQL中有一个IF
语句,但我不确定你是否可以根据它的结果触发不同的命令。
<强>锁定强>
在锁定方面,您有2个选项。对于MyISAM表,您只能使用http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html
锁定整个表LOCK TABLE users;
对于InnoDB表,单行没有明确的“锁定”,但是您可以使用事务来获取操作期间的专有权。 http://dev.mysql.com/doc/refman/5.0/en/innodb-locks-set.html
<强>更新强>
可能有一些简写符号,但我认为您必须列出查询中的每个字段。或者,您始终可以读取整行,删除它并使用简写INSERT查询再次插入。这一切都取决于你有多少领域。