2013-06-21 61 views
0

我有一個左連接查詢,顯示主表(tblMarkers)的所有字段和第二個表(tblLocations)中有匹配記錄的值。 tblLocations沒有記錄在tblMarkers每個IDMySQL更新表1和插入表2如果id不存在

$query ="SELECT `tblMarkers`.*,`tblLocation`.*,`tblLocation`.`ID` AS `markerID` 
FROM 
    `tblMarkers` 
LEFT JOIN `tblLocation` ON `tblMarkers`.`ID` = `tblLocation`.`ID` 
WHERE 
`tblMarkers`.`ID` = $id"; 

我很舒服,在tblLocations使用UPDATE來更新tblMarkers領域,但我怎麼更新或插入一條記錄tblLocations如果記錄尚不存在。

此外,我該如何鎖定我可以在工作中阻止其他人同時進行更新的記錄?

我還可以使用UPDATE tblMarkers *嗎?還是必須列出UPDATE語句中的每個字段?

+0

嘗試有條件的插入,使用'EXISTS'這裏有一個答案,告訴你如何。 http://stackoverflow.com/a/913929/2149092 –

回答

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查詢再次插入。這一切都取決於你有多少領域。

相關問題