Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL更新表1,如果id不存在,则在表2中插入_Mysql_Insert - Fatal编程技术网

MySQL更新表1,如果id不存在,则在表2中插入

MySQL更新表1,如果id不存在,则在表2中插入,mysql,insert,Mysql,Insert,我有一个左连接查询,它显示了主表(tblMarkers)中的所有字段和第二个表(tblLocations)中的值,其中有匹配的记录。 tblMarkers中没有每个id的记录 $query ="SELECT `tblMarkers`.*,`tblLocation`.*,`tblLocation`.`ID` AS `markerID` FROM `tblMarkers` LEFT JOIN `tblLocation` ON `tblMarkers`.`ID` = `tblLocation`

我有一个左连接查询,它显示了主表(tblMarkers)中的所有字段和第二个表(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
语句,但我不确定是否可以根据它的结果触发不同的命令

锁定

在锁定方面,您有两种选择。对于MyISAM表,只能使用

对于InnoDB表,没有针对单行的显式“锁定”,但是您可以使用事务在操作期间获得独占权限

更新


可能有一些速记符号,但我认为您必须列出查询中的每个字段。或者,您可以始终读取整行,删除它,然后使用速记插入查询再次插入。这完全取决于你有多少字段。

试试条件插入,使用
EXISTS
这里有一个答案,告诉你怎么做。
LOCK TABLE users;