0

我有一个左连接查询,它显示了主表 (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 语句中的每个字段?

4

1 回答 1

0

不幸的是,您可能必须在外部脚本中实现一些验证。SQL中有一条IF语句,但我不确定您是否可以根据它的结果触发不同的命令。

锁定

在锁定方面,您有两种选择。对于 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 查询再次插入。这一切都取决于你有多少领域。

于 2013-06-21T08:29:40.680 回答