2010-12-20 11 views
0

私は最近、MySQLをデータベースとして使用する、かなり大きなWebプロジェクトを開始しました。私は完全にMySQLに精通していませんが、私は単純なクエリを作成し、一般的に私が必要とするすべてを行うには十分知っています。MySQLでロックする

私は書類を書く前にテーブルをロックする必要があると言われましたか?これはいつも必要ですか?確かにMySQLは、データベースの同時読み書きを処理するために何らかの組み込み機能を備えていますか?

要するに、私はロックを使用するべきですか、どうすればいいですか?エル・ヨボの提案を1としてhttp://www.brainbell.com/tutors/php/php_mysql/When_and_how_to_lock_tables.html

あなたが選択querysオフいずれかの操作を実行している場合は、問題があるように行っていない

+2

なぜドン」あなたはあなたの問題を説明するだけですか? "私は彼らに書く前に私のテーブルをロックする必要があると言われた" ---このフレーズは間違っている質問は特にありません。 – zerkms

+0

標準のsqlを使用すると、ロックは自動的に行われます。テーブルをロックする必要がある場合は、MySQLがそれを行います。 –

+0

@zerkms私の同僚は、書き込む前にテーブルをロックするようにと言っただけです。なぜ、それが必要なのか正確にはわかりませんでした。それが私が求めている理由です。 – DanielGibbs

答えて

3

はここでロックを実装する際に、どのように優れた説明です。記事から :

ロックが必要とされている場合にのみ最初のデータベースから 値を読み、後でデータベースに値 を書く 開発したスクリプト。

+0

いいリンクですが、「あなたはおそらくそれについて心配する必要はありません」と言って要約する必要があると思います:) –

+0

ありがとう、これは私が探していたものです。だから私はトランザクションを実行しているときに明示的にテーブルをロックするだけで、単一のクエリでは必要ありません。 – DanielGibbs

+0

@DanieL: 'transaction'が必要な場合は' transaction'を実行してください。ロックとは関係ありません。 – zerkms

2

つまり、myisamは代わりにinnodbを使用しないでください。あなたが挿入、更新、削除したいときは(CRUD)の行が実行します。あなたが行をフェッチしたいとき

start transaction; 

insert into users (username) values ('f00'); 
... 

commit; -- or rollback 

はちょうどそれらを選択:

select user_id, username from users; 

希望はこのことができます:)

+0

+1 InnoDB。 Postgresの長年のユーザーとして、データベースの基本機能(トランザクション、外部キー、チェック制約をサポートしていないMyISAMなど)をサポートしていない* *エンジンの存在は、MySQLを初めて使用したときの衝撃的なものでした。 –

+0

また、トランザクションが必要なのは、1つのステートメントより* more *を実行し、すべてが失敗したか、またはすべてが成功したことを確認する必要がある場合、またはトランザクションの継続時間。 –

関連する問題