• ベストアンサー

mysqlでオートナンバーを設定した後、入力がエラーになる

こんにちは、Mysql初心者です。 テーブルの最初にid カラムを作成し、プリマリーキー、オートナンバーで設定したのですが、データを入力しようとすると下記エラーが発生します。 最初の位置にあるので、それ以外を入力しようとidカラムを無視して、 2番目のカラムから入力するのでは駄目なのでしょうか? insert into テーブル名 values ( 2番目のカラム値,3番目のカラム値・・・); エラーは下記です。 ERROR 1136: Column count doesn't match value count at row 1 よろしくお願いいたします。

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

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

列名を省略した場合、「表を構成する全列を、定義順で指定」と解釈されます。したがって、valuesで指定する値は、すべての列に対応している必要があります。 auto_incrementの列は、nullを格納すると、自動的にカウントアップしてくれます。 1番目のauto_increment列に、対応する値としてnullを入れ、列数と値数を合わせるといった方法があります。 insert into t1 values(null, 2番目の列の値, 3番目の列の値, ・・・) MySQL 5.0以降であれば、ビューを定義し、ビュー経由でinsertすることで、1番目の列を意識しないことも可能です。 create table t1 (c1 int primary key auto_increment, c2 int, c3 varchar(10), c4 datetime); insert into t1 values (null, -- auto_increment 100,'a',current_timestamp); insert into t1 values (null, -- auto_increment 200,'b',current_timestamp); create view vt1 as select c2,c3,c4 from t1; insert into vt1 -- ビュー経由 values (300,'c',current_timestamp);

okwv-first
質問者

お礼

回答ありがとうございました。 なるほど、null を入れると簡単にできました。 ビューを使った方法もやってみます。 ありがとうございました。

その他の回答 (1)

回答No.1

INSERT INTO `tablename` VALUES ( 2番目のカラム値,3番目のカラム値・・・); カラム名を指定しなかった場合は最初のカラムから自動的に割り当てられます。 idカラムも自動的に割り当てられてしまいますので「2番目のカラム値」がidカラムに 割り当てられてしまうためidの重複でエラーになっているとおもわれます。 対策としては以下のようにカラム名を指定する方法があります。 INSERT INTO `テーブル名` ( `2番目のカラム名`,`3番目のカラム名`,・・・ ) VALUES ( 2番目のカラム値,3番目のカラム値・・・); なお、あまりお勧めできませんがidカラムを末尾にもってくることで割り当てから外すという手もあります。

okwv-first
質問者

お礼

回答ありがとうございました。 なるほど、基本的なことを忘れていました。