我有一个左联接查询,它显示主表(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语句中的每个字段?
最佳答案
不幸的是,您可能必须在外部脚本中实施一些验证。 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查询再次插入。这完全取决于您拥有多少个字段。