2017-07-12 10 views
0

私はGoogleを使って検索して検索していますので、これはすでに回答済みまたは非常に簡単な場合は謝ります。MySQLを使用して1つのテーブルに値を挿入するn回

私は、同じ値を複数回追加する必要があるMySQLプロジェクトに取り組んでいます。たとえば、次のコードでは、私のテーブルに1「アリ」を追加している:100「蟻」でテーブルを移入するために

INSERT INTO `bugtypes` (`BugTypeID`, `BugTypeName`) VALUES 
(1, 'Ant'); 

が、私は百回以上このコマンドを実行する必要があります。 forループのようにこれを行うより良い方法があることは分かっていますが、構文を徹底的に解凍しています。現在のところ、これは私が作業しているとエラーを継続的に受信しています:

CREATE PROCEDURE addAnts(p1 INT) 
BEGIN 
    label1: LOOP 
    SET p1 = p1 + 1; 
    IF p1 < 100 THEN 
     INSERT INTO `bugtypes` (`BugTypeID`, `BugTypeName`) VALUES 
     (p1, 'Ant'); 
     ITERATE label1; 
    END IF; 
    LEAVE label1; 
    END LOOP label1; 
    SET @x = p1; 
END; 

ご協力ありがとうございます。

編集:私は問題の一部を疑う

https://i.gyazo.com/b71ee1c7d6ad41d4a347d97d7cfb6578.png

+0

なぜこれをやりたいですか? – Strawberry

+0

構文が正しく表示されていますか。 –

+0

私はこれを行う必要がある理由は、私のApp Devクラスの割り当てに関連しています。おそらくそれらのうちの1つは、「実生活でこれを行うことは決してありませんが、あなたのコードの周りにあなたのやり方を知っておくべきです」という質問です。 –

答えて

0

私は最終的に、@ Barmarに非常に似ている解決策を見つけましたが、それは簡単です。 @ Barmarのおかげで、BugTypeID列にAUTO_INCREMENTを追加する方法を学びました。助けてくれてありがとう、正しい方向の人に私を向ける!

delimiter // 

CREATE PROCEDURE doiterate() 
BEGIN 
    DECLARE total INT unsigned DEFAULT 0; 
    WHILE total <= 100 DO 
    INSERT INTO `bugtypes` (`BugTypeName`) VALUES ('Ant'); 
    SET total = total + 1; 
    END WHILE; 
END// 

delimiter ; 

CALL doiterate(); 
0

(と私たちはここに推測している)の文DELIMITER次のようになります。ここでは

は、私が受けてきたエラーです。

私たちがどのクライアントから実行しているのかはっきりしていません(MySQLコマンドライン?)ので、これは問題ではない場合は私には容赦してください。しかし、私たちがそのこぶを超えているかどうかにかかわらず、簡単な手順が作成できるという疑問のデモンストレーションはありません。したがって、より複雑なプロシージャ構文を使い始める前に、簡単なプロシージャを作成して実行できるようにしましょう。私たちが走ろうとする前に歩きましょう。十分な権限を持つユーザーとしてMySQLに接続されているMySQLのコマンドラインクライアントから

、のは本当に簡単なものを試してみましょう:

USE mydatabase ; 

DELIMITER $$ 

DROP PROCEDURE addAnts $$ 

CREATE PROCEDURE addAnts (p1 INT) 
BEGIN 
    INSERT INTO `bugtypes` (`BugTypeID`, `BugTypeName`) VALUES (77, 'Ant'); 
END$$ 

DELIMITER ; 

CALL addAnts(77); 

SELECT `BugTypeID`, `BugTypeName` FROM `bugtypes` WHERE BugTypeID = 77; 

は、すべてのエラーメッセージはありますか?もしそうなら、正確なのエラーメッセージのテキストは何ですか?

私たちがその丘を越えたら、プロシージャ内で構文を変更することができます。

+0

私は、.sqlファイルをアップロードして実行するために、mySQLローカルホストページを使用しています。私はこのすべてにかなり新しいです。 –

0

複数のVALUESリストを使用して1つのクエリを構成できます。ところで

CREATE PROCEDURE addAnts(p1 INT) 
BEGIN 
    @first = TRUE; 
    @query = "INSERT INTO `bugtypes` (`BugTypeID`, `BugTypeName`) VALUES "; 
    WHILE p1 < 99 do 
    SET p1 = p1 + 1; 
    IF NOT @first THEN 
     @query = CONCAT(@query, ","); 
    ELSE 
     @first = FALSE; 
    END IF 
    @query = CONCAT(@query, "(", p1, ", 'Ant')"); 
    END WHILE; 
    PREPARE @stmt FROM @query; 
    EXECUTE @stmt; 
    SET @x = p1; 
END; 

、あなたがBugTypeIDフィールドのAUTO_INCREMENTを使用していない理由はありますか?

+0

いいえ、正直言って、私はちょうどこのすべてのハングを取得しています。 AUTO_INCREMENTは何をしますか? 1-nから自動的に数えられるので、p1を使う必要はありませんか? –

+0

テーブルの主キーに 'AUTO_INCREMENT'オプションを追加すると、データベースは自動的にローを挿入するときにそのカラムに1,2,3、...の値を自動的に割り当てます。 – Barmar

+0

https://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html – Barmar

関連する問題