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

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

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

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

SQL

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

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

6回答

1648閲覧

シェルスクリプトでSQL実行したい

tk_flavor

総合スコア104

MySQL

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

SQL

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

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2017/07/05 06:29

MySQLが稼働しているサーバでシェルスクリプトで下記のような更新クエリをidを101,102,103,~と1つづつ増やしていって1万回
実行させたい事が希望です
更新するidを1万件入れて、MySQLコマンドからファイルとして読み込ませればいいのかと思うのですが
1万件のデータを作る作業効率の事を考えるとシェルスクリプトで自動化したい

INSERT INTO test( id, card, amount, point, created) VALUES ('100','111111111','200','100','2017-07-04 12:00:00') ;

この時、どのようにシェルスクリプト化すればよろしいのかを
ご教示頂けますと幸いです。

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

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

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

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

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

mattn

2017/07/05 06:42 編集

mysql コマンドのヘルプは調べましたか? まずは途中でもよいので書いたコードを貼って下さい。コードを貼る際はコードブロックを使って下さい。
guest

回答6

0

1万行を入力するとの事でしたが、その1万行を1トランザクションにされるのかどうかをきちんと理解した上で実行して下さい。途中でエラーになった際、トランザクションを張っていないと途中まで入ってしまった状態となり、続きから投入するのが難しくなります。また逆にトランザクションを張った状態で実行出来るコマンドの量には限界(ロールバックセグメント)があります。数万件程度であれば問題ないと思いますがもしもっと大量に投入されるのであればお気をつけて。
個人的には1万行の CSV ファイルを作ってインポートすると思います。

MySQL CSVファイル入出力

投稿2017/07/05 07:21

mattn

総合スコア5030

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

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

tk_flavor

2017/07/06 02:56

ご回答ありがとうございます トランザクションのご指摘ありがとうございます 仰るように対象のSQLをCSVなどのファイルとして配備してMySQLコマンドで実行した方が無難との事 了解しました。
guest

0

Bash

1seq --format="INSERT INTO test( id, card, amount, point, created) VALUES ('%g','111111111','200','100','2017-07-04 12:00:00') ;" 100 10100 | 2mysql --user=user_name --password=your_password db_name

でしょうか。
Excelでデータ作って、mysqlimportを使った方がいい気がします。

投稿2017/07/05 06:47

otn

総合スコア84423

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

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

tk_flavor

2017/07/06 02:59

取り込むSQLを事前に作成してMySQLコマンドで実行する方が正攻法だとは思っていますが 自動化処理などで出来るのならと思って質問させて頂きました。 回答頂きましたものでスクリプトで試してみます ありがとうございます
otn

2017/07/06 06:38

CSVでデータを作ってインポートするのが正攻法だと思いますよ。
guest

0

シェルスクリプトは、linux で実行できるコマンドの塊です。
なので、いきなり難しく考えず、やりたいことをひとつずつ考えていくことが解決への糸口です。

手順としては以下の通りかと思います。

(1) 最初に目的の MySQL コマンドをシェル上で実行する。
(2) (1) がちゃんと動いたら、コマンドを for 文などで一万回ループさせる。

投稿2017/07/05 07:06

tukuroku

総合スコア234

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

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

tk_flavor

2017/07/06 02:57

はい。 まずは、1手順、1手順動作の正常性確認を行いやる事、了解しました ありがとうございます
guest

0

#!/bin/bash USER=user MPASS=password DATABASE=database for i in `seq 100 10100` do echo "${i}"; mysql --defaults-extra-file=<(printf '[mysql]\npassword=%s\n\nuser=%s\n' ${MPASS} ${USER}) ${DATABASE} -e \ "INSERT INTO test( id, card, amount, point, created) VALUES ('${i}','111111111','200','100','2017-07-04 12:00:00') ;" done

今回の1万件という用途には上記だと都度認証がかかりパフォーマンスが出ないので向かないのですが
-e (--execute) オプション使うと任意のSQLを流せるので開発時のシェルスクリプトとかではよく使ってます。

投稿2017/07/05 12:44

cs_sonar

総合スコア69

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

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

0

何でもいいので、得意なプログラムで、そのINSERT文を1万行生成し、mysqlコマンドに送ればいいのでは?

bash

1mysql -u ユーザー -pパスワード < 出来たファイル 2```で行けますよ。

投稿2017/07/05 06:46

shi_ue

総合スコア4437

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

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

tk_flavor

2017/07/06 03:01

はい。 仰る通り、対象SQLを生成してファイル化し、MySQLコマンドで実行する方が正攻法だとは思っています 自動化処理について研究はしてみます ありがとうございます
guest

0

普通にforで回すとかやりようはありますが

sh

1#!/bin/sh 2 3for i in `seq 0 9` 4do 5echo "$i"; 6done 7

一般にストアドプロシージャでやるのが妥当です。

投稿2017/07/05 06:44

yambejp

総合スコア114583

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

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

tk_flavor

2017/07/06 03:02

ご回答ありがとうございます forで回す手法で自動化処理を試してみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問