• ベストアンサー

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

saintandreの回答

回答No.1

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

okwv-first
質問者

お礼

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

関連するQ&A

  • MySQL INSERT文 エラー

    カラム名を指定してデータを挿入するのがうまくいきません。 テーブル(tb1)作成後、たとえば、 insert into tb1(number, name, age) values(A104, '渡辺', 23); と入力すると、 '> と出力されてしまいます。 何が間違っているんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQL5.1.14で空白を入れるとエラーになる

    MySQL5.1.14をインストールをしたところ、4.1で動いていたプログラムが軒並みエラーストップ。 どうも、空白を入れるとエラーになるようで、5.1へ移行出来なくて困っています。どなたかご教授をお願いします。 環境は Windows2000Pro MySQL 5.1.14-beta サンプルのテーブルは drop table if exists addressbook; CREATE TABLE addressbook( id smallint(4) UNSIGNED NOT NULL auto_increment, name1 varchar(20) default NULL, birthday date default NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=sjis; INSERT INTO addressbook VALUES ('','名前1','2006-12-22'), ('','',''); で次のエラーが出る。 ERROR 1366 (HY000): Incorrect integer value: '' for column 'id' at row 1

    • ベストアンサー
    • MySQL
  • mysqlのsqlスクリプトエラーについて

    バージョンはmysql-4.0.14b-winです。 + mysql-connector-java-3.0.8-stable-bin 昔、このsqlを実行したときはうまくいっていたのですが 最近実行すると以下のようなエラーがでます バージョンのちがいがあるのでしょうか? unique制約で引っかかっているみたいです。 <実行> +----------------------------------------------+ | 1.MYSQLで以下のようにテーブルを作成しました。| +----------------------------------------------+ C:\>mysql\bin\mysqladmin -u root -p CREATE user Enter password: root C:\>mysql\bin\mysql -u root -p user < c:\syain.sql Enter password: root <問題点> 以下のようなエラーがでましたERROR 1170 at line 8: BLOB column 'username' used in key specification without a key length <実行したsql文> syain.sqlの内容は以下のとおりです。-- -- Host: localhost Database: user --------------------------------------------------------- -- -- Table structure for table 'table1' -- create table table1 (     id integer primary key, username text not null unique, password text not null, idnumber text not null, department text not null, mail text not null, extension text not null); -- -- Dumping data for table 'table1' -- --INSERT INTO table1 VALUES (1,'Peter','123456','1201','情報システム部','peter@it.planet.com','101'); INSERT INTO table1 VALUES (1,'Robert','abcdef','1202','情報システム部','robert@it.planet.com','102'); INSERT INTO table1 VALUES (1,'Mike','abcdef','1203','企画部','mike@pl.planet.com','201'); INSERT INTO table1 VALUES (1,'Celline','abcdef','1204','営業部','celine@mk.planet.com','301'); INSERT INTO table1 VALUES (1,'Akira','abcdef','1205','技術部','akira@tec.planet.com','401'); INSERT INTO table1 VALUES (1,'Eric','abcdef','1206','経理部','eric@ac.planet.com','501'); INSERT INTO table1 VALUES (1,'Rika','abcdef','1207','営業部','rika@mk.planet.com','302'); INSERT INTO table1 VALUES (1,'Diana','abcdef','1208','営業部','diana@mk.planet.com','303'); INSERT INTO table1 VALUES (1,'Britney','abcdef','1209','企画部','britney@pl.planet.com','202'); INSERT INTO table1 VALUES (1,'Takuya','abcdef','1210','技術部','takuya@tec.planet.com','402'); ご教授よろしくお願いします

    • ベストアンサー
    • MySQL
  • 入力値と外部キーをINSERTするには

    追加したいカラムが3つあるとしまして、そのうち2つはフォームからの入力値で、残り1つは別テーブルのIDをWHEREで引っ張ってきてINSERTしたい場合、INSERT...VALUES()とINSERT...SELECT構文を組み合わせないとダメかと思うのですが、組み合わせるとうまくいきません。2つの文に分けるしかないのでしょうか? やりたいことは下の感じのSQLです。が、解釈してくれません。 INSERT INTO room(A, B, C) VALUES (1, 2, SELECT other_table.id FROM other_table WHERE other_table.id = 1");

    • ベストアンサー
    • MySQL
  • MySQLでWHEN句のサブクエリ中にて

    MySQL ver.5.0.95です。 PHPからSQL文を作ってDBへインサートしているのですが 重複した値が合った場合はupdateするように書いています。 TBL1には |id   |string   |count 1    aaa    0 2    bbb    3 3    ccc    1 TBL2には |id2    |string2    |count2 1      aaa      0 2      bbb      2 3      ccc      1 実際はもう少し複雑ですが、こういう感じでデータが入ってるとします。 このとき、TBL1のそれぞれをインサート若しくはアップデートするのに TBL2の同一IDのものの、count2の状態によって場合分けしたく 同一IDのcount2が1以上なら変更しない、という風にするため以下のように書いたのですが insert into TBL1 values (1, "aaa", 3), (2, "bbb", 3), (3, "ccc", 3), (4, "ddd", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = values(id)) >=1 THEN count ELSE count + values(count) END; #1064 - You have an error in your SQL syntax;というエラーになって出来ません。 WHENの中のサブクエリで、where id2 = values(id) 恐らくこの文がダメなようです。 例えば決め撃ちで1つ1つ書くと通ります。 insert into TBL1 values(1, "aaa", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 1) >=1 THEN count ELSE count + values(count) END; insert into TBL1 values(2, "bbb", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 2) >=1 THEN count ELSE count + values(count) END; insert into TBL1 values(3, "ccc", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 3) >=1 THEN count ELSE count + values(count) END; insert into TBL1 values(4, "ddd", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 4) >=1 THEN count ELSE count + values(count) END; これをエラーになったような文に変えて1文にまとめたいのですが、無理でしょうか? あとそもそもこれをまとめたほうが速いと思ってそうしたいのですが、 変わらないのなら1文1文;でつなげて書くやり方でいこうと思っています。 まとめると速くなることはあるでしょうか?

    • ベストアンサー
    • MySQL
  • 指定された趣味を持つメンバーがいるグループを抽出するSQL

    グループテーブル、メンバーテーブル、趣味テーブルの3つのテーブルがあります。 あるメンバーはあるグループに属しており、趣味を1つ持っています。 以下がそのSQLです。 CREATE TABLE groups ( g_id int primary key ); CREATE TABLE members ( m_id int primary key , g_id int , h_id int ); CREATE TABLE hobbies ( h_id int primary key, h_name text ); INSERT INTO groups VALUES ( 1 ); INSERT INTO groups VALUES ( 2 ); INSERT INTO groups VALUES ( 3 ); INSERT INTO members VALUES ( 1, 1, 1); INSERT INTO members VALUES ( 2, 1, 3); INSERT INTO members VALUES ( 3, 1, 4); INSERT INTO members VALUES ( 4, 1, 4); INSERT INTO members VALUES ( 5, 2, 1); INSERT INTO members VALUES ( 6, 2, 2); INSERT INTO members VALUES ( 7, 2, 3); INSERT INTO members VALUES ( 8, 3, 2); INSERT INTO members VALUES ( 9, 3, 3); INSERT INTO members VALUES ( 10, 3, 4); INSERT INTO hobbies VALUES ( 1, 'sports' ); INSERT INTO hobbies VALUES ( 2, 'music' ); INSERT INTO hobbies VALUES ( 3, 'book' ); INSERT INTO hobbies VALUES ( 4, 'drive' ); 指定された趣味を持つメンバーがいるグループを抽出するにはどうすればいいでしょうか? 例えば、「読書が趣味なメンバーとドライブが趣味なメンバーがいるグループは?」「グループ1とグループ3」のような感じです。 一応自分で考えてみたのが、以下ですが、これだと趣味の指定が増減すると大きくSQLが変わってしまいます。 もっといいやり方はないでしょうか? 私はPostgreSQL8を使ってますが、汎用的なSQLであれば、そっちの方がいいです。 SELECT distinct m.g_id FROM members m join hobbies h ON m.h_id = h.h_id where h.h_name = 'drive' INTERSECT SELECT distinct m.g_id FROM members m join hobbies h ON m.h_id = h.h_id where h.h_name = 'book';

  • MySQLのエラーの意味

    お世話になります。 | Field | Type | Key | ------------------------------ | ID | int(11) | PRI | | NAME | varchar(50) | | | BIKO | varchar(100) | | とテーブルを作成し、 データの中身を | ID | NAME | BIKO | +----+--------+------+ | 1 | あああ | なし | | 2 | いいい | | | 3 | ううう | なし | と作成しました。 このテーブルを元に同じデーブルに新しいテーブルを作成しようと思っているのですが、 1)INSERT INTO kadai_table (ID,NAME) SELECT ID , NAME FROM kadai _table; とすると Duplicate entry '1' for key 1 というエラーがかえってきます。 2)INSERT INTO kadai_table (ID,NAME,BIKO) SELECT ID , NAME , BIKO FROM kadai _table; とすると Duplicate entry '0' for key 1 というエラーで テーブルが | ID | NAME | BIKO | +----+--------+------+ | 1 | あああ | なし | | 2 | いいい | | | 3 | ううう | なし | | 0 | あああ | なし | となってしまいます。 3)INSERT INTO kadai_table (ID,NAME) SELECT (ID,NAME) FROM kadai_table; とすると ERROR 1064: You have an error in your SQL syntax. Check the manual that corresp onds to your MySQL server version for the right syntax to use near 'NAME) FROM k adai_table' at line 1 とかえってきます。 3)のエラーの原因は構文の記述ミス・・・?と考えているのですがはっきりとしていません。 初歩的な問題なのでしょうが、googleなどで調べてみても思うようなエラーの原因が理解できません。 どなたか教えていただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • mySQLでINSERT Errorとなります。

    初心者です。よろしくお願いいたします。 データを入れたいのですが、エラーとなってしまいます。 以下でデータベースとテーブルを作成し、 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } $sql = 'CREATE DATABASE tori'; if (mysql_query($sql, $db)) { echo "データベースtori の作成に成功しました\n"; } else { echo 'データベースtoriの作成に失敗しました: ' . mysql_error() . "\n";} mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $query ="create table {$tbl_name} ( id char(8) primary key, date TEXT, sex TEXT, age TEXT )TYPE=MyISAM"; mysql_query($query); $query ="INSERT INTO `houzingpark`.`hatogaya` ( id , date , sex , iro ) VALUES ( '2', 'uu', 'ii', 'po' )"; mysql_close($db); ?> 以下で入れ込みたいのですが、出来ないのです。 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $sql="INSERT INTO hatogaya ( id , date , sex , iro ) VALUES ( 3, 2005-12-3, mesu, cya )"; mysql_query($sql); if(!$result){print 'INSERT Error!';} echo $sql; mysql_close($db); ?> でINSERTしようとするのですが、INSERT Error!と表示されてしまいます。 Adminで見るとデータベースとテーブルは出来ているのですが、どうしてもINSERTできないのです。 もう何時間も悪戦苦闘しております。 どなたかご指導よろしくお願いいたします。

  • phpPgAdminからSQL文を発行し、重複しない文字列を挿入したいのですが・・・

    下記のような nickname テーブルがあります。 nickname | id | name | | 1 |あいうえお | | 2 |hogehoge | カラム「name」はユニークな値として設定してあります。 そこで、phpPgAdminを使用し下記のようなSQLを発行するとニックネームが重複しているとエラーが発生してしまいます。 INSERT INTO nickname VALUES (3,'(2)'); INSERT INTO nickname VALUES (3,'(8)'); 「(2)」と「(8)」が同じ文字と判断されているようなのですが、なぜなのか教えて欲しいです。 また、これを回避する方法はあるのでしょうか? 他にも「@@@」と「.BW」も同じ文字として認識されてしまうようです。 SQLのバージョンはPostgreSQL 7.4.7を使用しております。 --追記-- 上記で説明している「(2)」と「(8)」ですが、○に囲まれた数字文字です。 なぜか、gooに投稿すると()半角括弧でかこまれた文字になってしまいます・・・

  • ACCESS SQLのINSERTについて

    TBLというテーブルにINSERT文を使用して1行レコードを追加したいです。TBLテーブルのカラムAにはシステム日付を、カラムBには別テーブルのselect count(*)の実行結果を挿入したいのですがうまくいきません。何か良い方法はございませんでしょうか? INSERT INTO カウンタ統計 ( [DATE], USER_COUNT ) VALUES (date(), (SELECT COUNT(*) FROM hiplus_HW_USER)); ※日付は問題なく挿入できるのですがSELECT文の結果が挿入できない状況です。宜しくお願いします.