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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

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

Q&A

解決済

2回答

420閲覧

3000行のUPDATE投入について

hh_ww

総合スコア22

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

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

0グッド

0クリップ

投稿2018/09/06 05:58

編集2018/09/06 06:57

phpMyAdminで以下のようなUPDATEが3000行あります。
これを一度でphpMyAdminに投入したいのですが、
phpMyAdminのSQL画面で3000行入力して実行ボタンを押下するよりは、
他に良い方法があるか知りたいです。

UPDATE tbl_data SET data_a ='222' WHERE data_b ='uuu' AND data_c ='xxx'; UPDATE tbl_data SET data_a ='333' WHERE data_b ='vvv' AND data_c ='yyy'; UPDATE tbl_data SET data_a ='222' WHERE data_b ='www' AND data_c ='zzz';

こういうものが3000行続く

data_aにSETするのは222か333のみ
data_bとdata_cは全てユニークなものが指定される

宜しくお願いします。

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

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

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

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

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

m.ts10806

2018/09/06 06:04 編集

やってみました? > 3000行のxxx.sqlファイルを作ってインポート画面でインポートとするとUPDATEが走るんでしょうか?
hh_ww

2018/09/06 06:07

試せる環境でないので質問しております。
m.ts10806

2018/09/06 06:14

「できます」と回答したところで試せないのであれば解決とはならないのでは。
hh_ww

2018/09/06 06:19

できるのであれば実行しますが、できるかわからないのに実行はできません。(できない=データが消える可能性もあると思うので)
m.ts10806

2018/09/06 06:24

できなかったとしてもそれは元のデータには影響ないですよ。形式が違うとかSQLの文法ミスとかくらいで、それはツール側がデータに行く前に吸収してくれます。それに何千もデータ更新するのであればどちらにしてもバックアップをとらずに実行しませんよね。
Orlofsky

2018/09/06 06:32

ROLLBACK できるでのあれば試せるかも?開発環境を用意できない職場でしたら、他の職場を探した方が吉です。
hh_ww

2018/09/06 06:57

こちらでインポートの仕様を調べたところ、インポートではできないようです。引き続きよろしくお願いします。
m.ts10806

2018/09/06 07:08

通常の環境であれば可能なはずですけど(私のローカルではできているので「まず試してみて」と書いたのですが)そういう制限があるなら仕方ないですね。サイズも大きいでしょうし。
m.ts10806

2018/09/06 07:09

SQL文を作ること自体を聞いてるのであればプログラム使えばすぐかなとは思いますけど、「3000行のxxx.sqlファイルを作って」とあるのでSQL自体は何かしらで作られてるんですよね。
hh_ww

2018/09/06 07:17

はい。UPDATEが3000行あるSQLは作りました。質問にも記載したように、phpMyAdminのSQL画面で3000行入力して実行ボタンを押下するというのがフリーズなどして一部UPDATEされないなど発生しないか心配で、まとめて手軽にできる方法をお聞きしております。mts10806さんの環境ではインポートできたのですね。では、こちらでもバックアップとって試してみます。
m.ts10806

2018/09/06 07:20

インポートできない仕様を見つけたというのはブラフでしたか。大変残念です。
hh_ww

2018/09/06 07:22

どこがブラフなのでしょうか?やはりUPDATEのインポートはできないようですが。
m.ts10806

2018/09/06 07:26

流れからすると「できる」というのを引き出すために「インポートの仕様でインポートできない」と言ったように捉えられます。まず見つけた仕様とやらと自身の操作を提示してください。でないと誰もそれが正しいか判断できません。私は単にUPDATE文を作ってファイルを.sqlとし、「インポート」からファイル選択して実行ボタンを押しただけです。
hh_ww

2018/09/06 07:27

そうとらえる考えが良く分かりません。そう意味でコメントしておりません。もう一度普通の考えでコメントを読んでください。
m.ts10806

2018/09/06 07:28

いずれにしてもphpMyAdmin側からすると同じ量のデータが来るにはかわりないので負担は変わらないとは思いますが。
m.ts10806

2018/09/06 07:30

ソース提示がないのでそう捉えられても仕方ありませんよ。 →インポートの仕様を調べたところ、インポートではできないようです。
hh_ww

2018/09/06 07:36

そうなのですね。参考にさせていただきます。
m.ts10806

2018/09/06 07:38

結局どこで見たのでしょうか。気になります。 >インポートの仕様を調べたところ、インポートではできないようです。
guest

回答2

0

abc
222uuuxxx
333vvvyyy
222wwwzzz

というテーブルをつくっておいて、一気に流し込むほうが
作業的には楽かもしれません
(というかこういう正規化をすればupdateする必要もない)

投稿2018/09/07 00:29

編集2018/09/07 00:30
yambejp

総合スコア114759

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

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

0

ベストアンサー

更新する値に注目すると、条件を制御すれば良いのは分かりますか?

SQL

1UPDATE tbl_data SET data_a ='222' 2WHERE (data_b ='uuu' AND data_c ='xxx') 3 or (data_b ='www' AND data_c ='zzz')

投稿2018/09/06 07:00

sazi

総合スコア25173

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

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

hh_ww

2018/09/06 07:06

回答ありがとうございます。 わかります。 この方法で3000行分作るということですよね。 やはりそういった結構手間がかかる方法しかないですよね?
sazi

2018/09/06 07:16 編集

2つのUPDATE文を流すだけなのは分かっていますよね? 条件が3000パターンならそれぞれの条件を合わせて3,000パターンのor条件が必要ですけど、 集約できるかもしれません。 ですが、(data_bとdata_cは全てユニーク)ということなので、それは貴方にしか分かりません。
hh_ww

2018/09/06 07:14

はい。わかっております。それが結構大変ですねという意味でコメントいたしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問