質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
MySQL Workbench

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

5回答

40177閲覧

MySQLでinsert文を1000回繰り返すクエリ文を書きたい

widget11

総合スコア221

MySQL Workbench

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

1グッド

1クリップ

投稿2018/11/19 05:12

端的に言うとプログラミング言語でいうforやwhile、loopに当たる繰り返し処理を行いたいのですが調べても出てこない為、質問させて頂きます。
環境はMySQLでMySQL WorkBenchでクエリを実行しております。

insert into test_table(ID, Name,CreatedDate, CreatedBy, LastUpdatedDate, LastUpdatedBy) values('100000007', 'テスト', now(), '佐藤', now(), '佐藤')

というSQL文があってこれを1000回繰り返したい場合どのような文章を書けばよいのでしょうか?
初歩的な質問かもしれませんがよろしくお願い致します。

Reflux0907👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/11/19 05:15

その1000個分のデータはどのように準備されるのでしょうか
guest

回答5

0

投稿2018/11/19 06:22

sazi

総合スコア25300

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

プロシージャをつかって処理しますが、そもそもidがユニークじゃないですが大丈夫ですか?
なんらかのプライマリーキーが必要そうなテーブルに見えます

sample

SQL

1create table test_table(ID int primary key auto_increment, Name varchar(10),CreatedDate datetime, CreatedBy varchar(10), LastUpdatedDate datetime, LastUpdatedBy varchar(10)); 2alter table test_table auto_increment = 100000007;

以下、投入のしかたは2つ考えられますが、圧倒的に後者の方が速いです
(私の環境だと100倍以上速かったです)

(1)単純な入力

SQL

1drop procedure if exists test_procedure1; 2delimiter // 3create procedure test_procedure1() 4begin 5declare i int default 0; 6while i<1000 do 7set @sql="insert ignore into test_table(Name,CreatedDate,CreatedBy,LastUpdatedDate,LastUpdatedBy) "; 8set @sql=concat(@sql,"values('テスト', now(), '佐藤', now(), '佐藤')"); 9prepare stmt from @sql; 10execute stmt; 11set i=i+1; 12end while; 13end 14// 15delimiter ; 16call test_procedure1

(2)まとめて入力

SQL

1drop procedure if exists test_procedure2; 2delimiter // 3create procedure test_procedure2() 4begin 5declare i int default 0; 6set @sql="insert ignore into test_table(Name,CreatedDate,CreatedBy,LastUpdatedDate,LastUpdatedBy) "; 7while i<1000 do 8if i=0 then 9set @sql=concat(@sql,"values"); 10else 11set @sql=concat(@sql,","); 12end if; 13set @sql=concat(@sql,"('テスト', now(), '佐藤', now(), '佐藤')"); 14set i=i+1; 15end while; 16prepare stmt from @sql; 17execute stmt; 18end 19// 20delimiter ; 21call test_procedure2

ただし、後者のように膨大な文字列を処理する場合はメモリなどの制約もあるので
経験上1万程度を上限と考えたほうがよいでしょう。
例えば100万件のデータを投入する場合は、1万件のデータ投入を100回やるイメージです

投稿2018/11/19 05:16

編集2018/11/19 06:01
yambejp

総合スコア116443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

他の方々の回答の通り、ご希望の機能はストアドプロシージャになると思いますが、INSERT のループで使うという使い方は聞いたことが無いですね。
通常は、何らかのプログラムで 1000 個のデータを INSERT する SQL を作成する、もしくは何らかのプログラムで INSERT も含めて処理するものを作成する、という方法で対応すると思います。

投稿2018/11/19 05:46

ssasaki

総合スコア1167

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SQLにはLOOPはサポートされていませんから、【MySQL】プロシージャを使ってforeach的なことをしてみる のように LOOPできる言語を使います。MySQLだけで完結させたいならストアド・プロシージャ

投稿2018/11/19 05:25

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

当方は実際にやったことないのでなんともですが、こういったものを使えば実現できそうでしょうか。
【技術メモ】MySQLのストアドプロシージャを使ってinsertとかdeleteとかをループさせて実行

投稿2018/11/19 05:17

madoka9393

総合スコア994

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問