繁体   English   中英

如果ID不存在,则在表2上执行MySQL UPDATE表1和INSERT

[英]MySQL UPDATE table 1 and INSERT on table2 if id doesnt exist

我有一个左联接查询,显示来自主表(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查询再次插入。 这完全取决于您拥有多少个字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM