人に聞けない痔の悩み、これでスッキリ >>

MySQLの現存するテーブルからcreate table文を起こす方法ありますか?

・お金が掛からない
・CUIベースでできる
が条件です。

show full columns from テーブル名;
でテーブルの情報を参照できるところまでは理解したのですが。。

showとかの特殊コマンドでなくて、管理情報のテーブル(かビュー、あるいはシノニム)に直接クエリー投げれるなら、スクリプト組めばなんとかなりそうなのですが。。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

mysqldump を --no-data オプション付きで実行ということではないのかな



参考URL:http://dev.mysql.com/doc/refman/4.1/ja/mysqldump …
    • good
    • 0
この回答へのお礼

ありがとう御座います。
非常に助かりました。

お礼日時:2005/11/22 11:58

>show で取り出した情報をファイルに書き出してそれ>を再読み込みしながら加工すればできなくは無い


何やら随分深い意味でお困りのようで御座います。

そのようにコダワルことは物事の本質に迫る優れた
才能有りですね。

私はそこまで知性に優れていないためかどうにもピン
と来ないのですがきっと深い意味だと思います。

もうちょっと 何故そういう必要があるのか
平凡な私にお教え下さい。

スクリプトと言われていますがJAVAでもOKですか?
とはいえ 答えが出る可能性は薄いです。

この回答への補足

買いかぶられているようですが、特別な事は全く考えていません。
テーブル、作成ソース、ドキュメントを包括的に管理したいだけです。

クリエイト文⇔TBL⇔ドキュメント


オラクル、SQLサーバーといったDBでは普通に出来る事です。


別にそのような立派なツールまでは期待していないです。
無いなら無いでいいのですが、せめて手作りできる糸口ぐらいは無いと寂しいです。


スクリプトとは固有名称としてではなく一般用語としてのスクリプトです。
コマンドの集合体をファイルにまとめたものです。
シェルでも何でもいいのです。

補足日時:2005/11/18 02:30
    • good
    • 0

例えば


describe テーブル名 
で テーブルのフィールド名と型(intやchar)長さの
データを配列やCSVファイルに保存する。

次に
そのデータを利用して
create table table1 (item char(5) not null)
を作成するのですね。

でも現存するのですから
create table文は文法違反ではないのでしょうか?
少なくとも一度削除の要ありまたは delete後
insertのほうがよいと思います。

この回答への補足

レス感謝。

DESCRIBE は SHOW COLUMNS FROM の簡略形なので結局はshowコマンドでしか取り出せないという事ですか。
showコマンドで参照できるところまではマニュアルで理解したのです。

そうでなくてshowコマンドで取り出せるぐらいなので管理情報がどこかにテーブルかそれに順ずる形式で保存されているハズですよね。
それを直接クエリで参照する方法があるのか?無いのか?
もしくは、そんな面倒なこと考えなくても、もっと便利な外部スクリプトが用意されているとか、
あるいは、MySQLでは一切そんな事はできないので、そういう事したいなら他のDBMSに乗り換えた方が良いとか、
そういう情報が欲しいです。

たしかにshow で取り出した情報をファイルに書き出してそれを再読み込みしながら加工すればできなくは無いでしょうが、linux内でスクリプト一つで完結させるにはかなり面倒な処理になりますよね。

補足日時:2005/11/17 10:04
    • good
    • 0

>テーブルの情報を参照


describe テーブル名

それでinsert into テーブル名 values(    )
が一般的と思うのですが ご趣旨が今一解りません。

この回答への補足

レス有難う御座います。

>ご趣旨が今一解りません。

create table tbl1 (itm1 varchar(1) not null);

でテーブルを作成したとします。
コマンドで直接打ったか、
もしくは
????.sqlというテキストファイルにコードを書いてそこから作成したが、そのファイルを失念したとします。

物理的に存在する tbl1 から逆に
create table tbl1 (itm1 varchar(1) not null);というコマンドを生成する方法を考えています。

例えば

システムテーブルに「テーブル管理」というのと「カラム管理」があり、それぞれ項目が以下だったとします。
※「インデックス管理」も必要ですが説明が複雑になるので割愛します


<テーブル管理>
・テーブル名
・容量情報
・その他テーブルに関する情報

<カラム管理>
・テーブル名
・SEQ
・項目名
・属性
・レングス
・Nullを許可する
・その他カラムに関する情報

これをselectで結合して呼び出しつつ編集しファイルに出力するスクリプト作れば簡単にcretate table文を生成できると思うのですが、そういうシステムテーブルが存在するのかどうか?という事です。

さらに言えば既にそういう事を実現したスクリプトが存在すればもっと楽なのですが。

補足日時:2005/11/16 20:03
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCSVファイルの中で、「 , 」カンマを使いたい

「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか?

具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。
全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。

例えば、特殊文字などで対応可能でしょうか?

Aベストアンサー

受け渡しに使うと言うことは相手方のアプリケーションのことも考えなければいけないのですが・・・とりあえず対応が簡単そうな方法を。

1.各セルを""で囲む。(もちろんデータにダブルクォートがある場合はカンマと同様に困ります。
2.カンマで区切らずにタブで区切る。(比較的使われない文字ですが、やはりデータ中にタブがあるとカンマと同様です)

難しいけれど完璧に対応するためには、データ中の区切り文字は特殊な文字列に変更し、受け取り側のアプリケーションではその特殊な文字列をデータ中の区切り文字として扱うという方法が使われます。
例えば、データ中のカンマは\,にするとか。

データ作成側、受け取り側でそれぞれどこまで対応できるのか分かるともっと簡単かつ具体的な方法を回答できるかも知れません。

QSQLで特定の項目の重複のみを排除した全項目を取得する方法

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として


項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 B    え    イ    江

上のようなデータを取得したいのです。
この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。
また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。

どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のよ...続きを読む

Aベストアンサー

比較可能で一意性のある値をもてる項目6をテーブルに追加して、

select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6;

――ってやるのが、一番手っ取り早いと思います。
他のところに影響がでないのであればですが。
oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。

Qバッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には1行の文字列があります。
このファイルをバッチで読み取り、変数に設定したいです。

例:
test.txt
abcacbacbacbacbacbacbacbacb

test,bat
set DATA=[test.txtを読み込んだ値]

よろしくお願い致します。

Aベストアンサー

これですね。

参考URL:http://www.upken.jp/kb/dqvgHNRUxwFDkmtoqEwfXHUjDrevNv.html

QデータベースのINT型項目にNULLはNG?

以前、知り合いからデータベースのINT型の項目には出来ればNULLを許可しない(NOT NULL)方がいいと聞いたことがあるのですが、本当でしょうか?

現在不動産の物件データを登録するためのシステムを作成しており、
データベースの設計を行なっている最中なのですが、
例えば金額や面積など数字しか入力されない項目はINT型にしたいと考えています。
※データベースはMySQLになります。

ただし、
物件データ登録時に数字項目に何も入力されなければ「NULL」、
0以上の数値を入力されている場合にはそのままその数値をデータベースに登録したいと考えています。
※0を入力されている場合には「0」をそのまま入れたいです。

INT型の項目にはNULLを入れるのを避けた方がいい場合には、0を入れるような仕様に変更しようと考えているのですが、その辺のことについて教えて頂けると助かります。

ざっくりとした質問で申し訳ございませんが、宜しくお願い致します。

Aベストアンサー

物件データ登録時に数字項目に何も入力されなければ「NULL」、0を入力されている場合には「0」
本来の意図としては正しいはずです。
Nullは本来、どの値を入れればいいのかわからない値ということなので、
数字がわからない=何も入力していない ということで、Nullを指定するのは正しいはずです。
しかし、
実際に使うときには、Nullは実に不自由なので、
Nullは使うなという話がでてきます。
## 私なら、入力区分 0=未入力、1=入力 と 数値(未入力は0)と別々に持つかもしれません。

というのは例えば、
金額 100万以上の物件は何件?
というSQLに対して、100件と答えがでて、
金額 100万未満の物件は何件?
というSQLに対して、50件と答えがでたとします。
じゃあ、全物件は?・・・172件だったりします。
何故?⇒Nullが22件だったためです。
(Nullは0とは違い、どちらの検索条件にも含まれません。)
・・・この不自由さを回避するために数値項目に、Not Null制約をつけることが多いです。

Qすべてのテーブル削除

DELETE tbl1,tbl2,tbl3 FROM tbl1,tbl2,tbl3;
DROP TABLE tbl1,tbl2,tbl3 FROM tbl1,tbl2,tbl3;

以外で簡単に複数あるテーブルを削除する方法ってありますでしょうか?

Aベストアンサー

>すべてのテーブル削除

そもそもFROMはいらないでしょ・・・

DROP DATABASE hoge
で親DBを削除してつくりなおすとかありそうですが
ただ、テーブルの削除が頻繁に起こる運用というのは問題では?
ごくたまにしかないならテーブル名を指定して削除するのが妥当

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

Q日付の範囲検索がしたい

お世話になります。

テーブル名:info
フィールド名:no,date,name
フィールドのデータタイプ:int型,char型,char型

のデータベースがあります。dateにはyyyy/mm/ddの形でデータが入っているのですが、
そのdateから、例えば2004/01/01~2005/01/01までに該当するデータを検索して、抽出したいのですが、方法がわかりません。

SELECT REPLACE(date, '/', '') FROM info

で、“/”がないデータを取り出すことはできるのですが、その後どうしたら良いかがわかりません。
どなたかいい方法教えていただけないでしょうか?

Aベストアンサー

SELECT * FROM info WHERE date BETWEEN '2004/01/01' AND '2005/01/01'

で取れませんか?

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qtail -f /var/log/message の停止方法を教えてください。

tail -f /var/log/message の停止方法を教えてください。インターネットで検索したところ「-cを押す」というのがありましたが意味がわからないでいます。

Aベストアンサー

「Ctrl」キーを押しながら「c」キーを押す

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。


人気Q&Aランキング