• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テーブルロックが必要ですか?)

テーブルロックが必要ですか?

このQ&Aのポイント
  • mysqlとphpを使ってwebシステムを製作しているのですが、テーブルロックを使用する方法について質問です。
  • テーブル a のidごとの投稿数+1をコメントnoとして割り振りたいです。結果をweb上にSELECTするとこんな感じになります。
  • (質問1) テーブルロックを使用せずに、1つのSQL文で済ませられないでしょうか?(質問2)テーブルロックの最初の行はどちらがいいのでしょうか?環境: mysql5.0(MyISAM)/ php5.1系

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1回答者です。 auto_incrementの注意事項を書き忘れました。 auto_incrementを使用時、ロールバック等が発生すると、欠番ができてしまいます。したがって欠番が許されないような業務なら、auto_incrementは使用できません。

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/example-auto-increment.html
kash0987
質問者

お礼

>>auto_increment列には、nullを挿入することで、自動的に最大値+1の値が格納されます。 auto_incrementは総合的に数を増やす機能かと思っていたのですが、個別に数を増やすこともできるのですね。auto_incrementを使用していないテーブルは早速この方法を導入させていただきます。 >>auto_incrementを使用時、ロールバック等が発生すると、欠番ができてしまいます。したがって欠番が許されないような業務なら、auto_incrementは使用できません。 なるほど、InnoDBなどでトランザクションを使用するときは、この方法はやめておいた方がいいのですね。 ありがとうございました。

その他の回答 (1)

回答No.1

通番を自動的に生成する機能として、幾つかの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');

関連するQ&A