0

プライマリ テーブル (tblMarkers) のすべてのフィールドと、一致するレコードがある 2 番目のテーブル (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ステートメントがありますが、その結果に基づいて別のコマンドをトリガーできるかどうかはわかりません。

ロック

ロックに関しては、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 クエリを使用して再度挿入することもできます。それはすべて、所有しているフィールドの数によって異なります。

于 2013-06-21T08:29:40.680 に答える