• ベストアンサー
  • 暇なときにでも

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

MySQLの現存するテーブルからcreate table文を起こす方法ありますか? ・お金が掛からない ・CUIベースでできる が条件です。 show full columns from テーブル名; でテーブルの情報を参照できるところまでは理解したのですが。。 showとかの特殊コマンドでなくて、管理情報のテーブル(かビュー、あるいはシノニム)に直接クエリー投げれるなら、スクリプト組めばなんとかなりそうなのですが。。

共感・応援の気持ちを伝えよう!

  • MySQL
  • 回答数4
  • 閲覧数259
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.4
  • siwa32
  • ベストアンサー率60% (9/15)

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

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/mysqldump.html

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

その他の回答 (3)

  • 回答No.3

>show で取り出した情報をファイルに書き出してそれ>を再読み込みしながら加工すればできなくは無い 何やら随分深い意味でお困りのようで御座います。 そのようにコダワルことは物事の本質に迫る優れた 才能有りですね。 私はそこまで知性に優れていないためかどうにもピン と来ないのですがきっと深い意味だと思います。 もうちょっと 何故そういう必要があるのか 平凡な私にお教え下さい。 スクリプトと言われていますがJAVAでもOKですか? とはいえ 答えが出る可能性は薄いです。

共感・感謝の気持ちを伝えよう!

質問者からの補足

買いかぶられているようですが、特別な事は全く考えていません。 テーブル、作成ソース、ドキュメントを包括的に管理したいだけです。 クリエイト文⇔TBL⇔ドキュメント オラクル、SQLサーバーといったDBでは普通に出来る事です。 別にそのような立派なツールまでは期待していないです。 無いなら無いでいいのですが、せめて手作りできる糸口ぐらいは無いと寂しいです。 スクリプトとは固有名称としてではなく一般用語としてのスクリプトです。 コマンドの集合体をファイルにまとめたものです。 シェルでも何でもいいのです。

  • 回答No.2

例えば 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内でスクリプト一つで完結させるにはかなり面倒な処理になりますよね。

  • 回答No.1

>テーブルの情報を参照 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文を生成できると思うのですが、そういうシステムテーブルが存在するのかどうか?という事です。 さらに言えば既にそういう事を実現したスクリプトが存在すればもっと楽なのですが。

関連するQ&A

  • MySQL show create table ~と同じOracleでのSQL文

    Mysqlでテーブルを作成するステートメントを表示するSQL文 ” SHOW CREATE TABLE テーブル名”に該当する、oracleの SQL文ってありますか?

  • mysql のテーブルの名前は数字ではだめですか

    phpmyadmin で数字名前のテーブル上手く作りましたが。。なぜかmysqlで $query = "CREATE TABLE 2234( id int AUTO_INCREMENT key, 入力日 VARCHAR(10 ) $squery1 = mysql_query($query); (create table "2234"( ...)もcreat table '2234'(..)もだめ) なぜかエラーが出ました?

  • create table as select

    create table 新TABLE as select * from コピー元TABLE; としたい場合に、"コピー元TABLE" に、LONGROW型項目があり、 失敗してしまいます。 何か、回避策はないでしょうか? 宜しくお願い致します。

  • MySQLで論理名を取得する方法

    表題の通り、MySQLでカラムの論理名を取得する方法を探しています。 show full columns from table; でやってもダメでした、、、

  • MySQL table editorについて

    このエラーについて教えてください! Error while executing query CREATE TABELE 'depot_development','products'( 'id'INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, ~~~ ) ENGINE = lnnoDB; MySQL Error Number 1005 Can't create table '.\depot_development\products.frm'(errno: 121)

    • ベストアンサー
    • MySQL
  • MySQLで、INSERT文でエラー

    下記のスクリプトで、MySQLサーバーのテーブルの中身を見ようとしたら、 返り値が空でした(行数0) ( クエリの実行時間 0.0010 秒 ) と表示されます。 どこが間違ってるのでしょうか。 ////////////////////// // データベース登録 // ////////////////////// $con = mysql_connect("mysql020.******", "*****", "*****"); // リモートのMySQLデータベースサーバーに接続する mysql_select_db("LAA0471050-ideamemo"); // データベースサーバーに存在する(myPHPAdminで作成済みの)データベースを選択する $sql = "SET NAMES utf8"; mysql_query($sql, $con); $sql = "INSERT INTO ideamemo_table (color, title, contents, create) VALUES ('$color', '$title', '$contents', '$create');"; mysql_query($sql, $con); mysql_close($con); ?>

    • ベストアンサー
    • MySQL
  • create temporary tableについて

    MYSQL5.0を利用して、PHPから以下の作業をしています。 create temporary table tempで作成された一時的なテーブル(temp)は削除しなくても問題ないのでしょうか? もし削除する必要がある場合は、drop temp で大丈夫でしょうか?

    • ベストアンサー
    • MySQL
  • MySQLのVIEWテーブルが削除できない

    PHPプログラムを作りながらMySQLクエリをしていました。MySQLのクエリの過程でviewを作っていましたが開発中なので、createはしたもののdropしないというのをくりかえしてました。 プログラムができたので、createしたら終了時にdropして始末できるようにしました。 そこで、開発過程で残ってしまったviewを、phpMyAdminやコマンドで削除しようとしましたが削除できません。 強制的でもいいので削除する方法を教えてください。

  • insert文等で「`」の有無で失敗するテーブルとしないテーブルがある。

    XAMPP(winXP、PHP4)を使っています。 Aのテーブルでは $query= "insert into table (a,b,c,d) values('1','2','3','4')"; $result = mysql_query($query); でデータが追加されるのに、Bのテーブルでは失敗しました。 今日ずっと何が間違っているのかわからなかったのdですが、 $query= "insert into table (`a`,`b`,`c`,`d`) values('1','2','3','4')"; $result = mysql_query($query); とすると成功しました。 なぜAのテーブルでは「`」が無くても成功したのに、Bのテーブルでは必要なのでしょうか。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLが動かない(テーブルレコード全表示したい

    初心者です。 いろいろ検索して改善していったつもりですが、なぜ動かないのかどうしてもわからないところがあったので質問させていただいてます。 /* サーバーへの接続 */ $link=mysql_connect($server,$user,$passwd); /* データベース内のテーブルの名前を$tablesに配列で格納 */ $STS = "SHOW TABLE STATUS"; $mytables = mysql_query($STS); while($r = mysql_fetch_array($mytables, MYSQL_ASSOC)){ $tables[] = ($r["Name"]."<br>\n"); } /* 全テーブルのレコードを全てプリント */ foreach($tables as $value){ $results = mysql_query("select * from " . $value, $link); while ($row = mysql_fetch_array($results, MYSQL_ASSOC)) { print_r($row); print("<br>\n"); } } mysql_close($link); foreachの部分を for($i = 0; $i < 2 /*$tables[$i] != 0*/; $i++){ $results = mysql_query("select * from " . $tables[$i], $link); $row = mysql_fetch_array($results, MYSQL_ASSOC); print_r($row); } でもやってみました。 これを利用して、何とか表形式でデータベースのテーブルのレコードをwebページに出力させようと思っています。 実行するとprint_r($row)の出力がでず、いろいろ試してみた結果、$resultsもしくは$rowに問題があることがわかりました。 var_dump($row); でNULLが出力されました。 var_dump($results); もやったのですが、うろ覚えなのでここには書きません。 $results = mysql_query("select * from gutaiteki_table", $link); としたら動いたので、select * from の後に変数を続けているからだめなのかなと思いましたが、私にはどうにもしようがありません。 これを正常に動作させる方法、他にうまいやり方があればその方法を教えてほしいです。 (私はデバッグのやり方がわからないので、「改変してwebのページを更新する」というのを繰り返してプログラムを作成していますが、他に方法があればそれも併せてご意見ほしいです。これは余裕があったらで構いません。)