- ベストアンサー
テーブルロックが必要ですか?
- mysqlとphpを使ってwebシステムを製作しているのですが、テーブルロックを使用する方法について質問です。
- テーブル a のidごとの投稿数+1をコメントnoとして割り振りたいです。結果をweb上にSELECTするとこんな感じになります。
- (質問1) テーブルロックを使用せずに、1つのSQL文で済ませられないでしょうか?(質問2)テーブルロックの最初の行はどちらがいいのでしょうか?環境: mysql5.0(MyISAM)/ php5.1系
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1回答者です。 auto_incrementの注意事項を書き忘れました。 auto_incrementを使用時、ロールバック等が発生すると、欠番ができてしまいます。したがって欠番が許されないような業務なら、auto_incrementは使用できません。
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
通番を自動的に生成する機能として、幾つかのRDBMSでは「シーケンス」という機能を持っています。MySQLでは、auto_incrementという形で、シーケンスに相当する機能を持っており、これを利用するのが簡単です。MyISAMなら、auto_incrementの列を2番目の構成列としてprimary keyにすれば、先頭の構成列毎に2番目の構成列に通番を自動生成してくれます。 【表定義例】 create table a (id int, no int auto_increment, comment varchar(256), primary key(id,no)); 【挿入例】 auto_increment列には、nullを挿入することで、自動的に最大値+1の値が格納されます。 insert into a values(101,null,'a'); insert into a values(201,null,'a'); insert into a values(301,null,'a'); insert into a values(101,null,'aa'); insert into a values(101,null,'aaa'); insert into a values(201,null,'aa'); insert into a values(301,null,'aa');
お礼
>>auto_increment列には、nullを挿入することで、自動的に最大値+1の値が格納されます。 auto_incrementは総合的に数を増やす機能かと思っていたのですが、個別に数を増やすこともできるのですね。auto_incrementを使用していないテーブルは早速この方法を導入させていただきます。 >>auto_incrementを使用時、ロールバック等が発生すると、欠番ができてしまいます。したがって欠番が許されないような業務なら、auto_incrementは使用できません。 なるほど、InnoDBなどでトランザクションを使用するときは、この方法はやめておいた方がいいのですね。 ありがとうございました。