LOCK TABLE文により明示的に、表に共有あるいは排他のロックをかけることができます。 表へのロックは現在のトランザクションが終了するまでの間、続きます。
表をロックできるのは、データベースの所有者と表の所有者です。
この文でシステム表にロックをかけることはできません。
LOCK TABLE 表名 IN { SHARE | EXCLUSIVE } MODE
いずれのモードであっても、トランザクションは表をロックした後、それ以上の行ごとのロックを得ることはできません。例えば、情報を読むためにトランザクションがFlightsという表の全体を共有モードでロックした後、ある文にて行を更新するために特定の行への排他ロックを必要としたとします。しかしながら、既にFlights表へのロックがあるため、排他ロックも表毎となる必要があります。
他の接続が表に対して既にロックをかけているため、その表へのロックが取得できない場合、デッドロックのタイムアウト時間が経過した後、文への例外が発生します。(SQLState X0X02)
LOCK TABLE Flights IN SHARE MODE; SELECT * FROM Flights WHERE orig_airport > 'OOO';
LOCK TABLE FlightAvailability IN EXCLUSIVE MODE; UPDATE FlightAvailability SET economy_seats_taken = (economy_seats_taken + 2) WHERE flight_id = 'AA1265' AND flight_date = DATE('2004-03-31'); UPDATE FlightAvailability SET economy_seats_taken = (economy_seats_taken + 2) WHERE flight_id = 'AA1265' AND flight_date = DATE('2004-04-11'); UPDATE FlightAvailability SET economy_seats_taken = (economy_seats_taken + 2) WHERE flight_id = 'AA1265' AND flight_date = DATE('2004-04-12'); UPDATE FlightAvailability SET economy_seats_taken = (economy_seats_taken + 2) WHERE flight_id = 'AA1265' AND flight_date = DATE('2004-04-15');
LOCK TABLE Maps IN EXCLUSIVE MODE; SELECT MAX(map_id) + 1 FROM Maps; -- INSERT INTO Maps . . .