重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちは、Mysql初心者です。

テーブルの最初にid カラムを作成し、プリマリーキー、オートナンバーで設定したのですが、データを入力しようとすると下記エラーが発生します。

最初の位置にあるので、それ以外を入力しようとidカラムを無視して、
2番目のカラムから入力するのでは駄目なのでしょうか?

insert into テーブル名 values ( 2番目のカラム値,3番目のカラム値・・・);

エラーは下記です。
ERROR 1136: Column count doesn't match value count at row 1

よろしくお願いいたします。

A 回答 (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);
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

なるほど、null を入れると簡単にできました。

ビューを使った方法もやってみます。

ありがとうございました。

お礼日時:2009/02/21 14:16

INSERT INTO `tablename` VALUES ( 2番目のカラム値,3番目のカラム値・・・);



カラム名を指定しなかった場合は最初のカラムから自動的に割り当てられます。
idカラムも自動的に割り当てられてしまいますので「2番目のカラム値」がidカラムに
割り当てられてしまうためidの重複でエラーになっているとおもわれます。


対策としては以下のようにカラム名を指定する方法があります。

INSERT INTO `テーブル名` ( `2番目のカラム名`,`3番目のカラム名`,・・・ ) VALUES ( 2番目のカラム値,3番目のカラム値・・・);


なお、あまりお勧めできませんがidカラムを末尾にもってくることで割り当てから外すという手もあります。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

なるほど、基本的なことを忘れていました。

お礼日時:2009/02/21 14:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す