A fellow in our shop wrote a perl script to do just that. Enjoy!
Andy Andy Ingham Systems Librarian Academic Affairs Library UNC-Chapel Hill 919-962-1288 [EMAIL PROTECTED] ********************************************************************************************************* #!/usr/local/bin/perl # describe.pl # # Tim Shearer # # Academic Affairs Library # University of North Carolia at Chapel Hill # [EMAIL PROTECTED] # 01/28/2002 # # Please use, distribute, and tweak freely. I would appreciate # my name staying with the distributed versions. # # This perl script will do a describe for all tables in a mysql database # and save the output as a text file locally. # # It requires that you have perl and the perl DBI library installed. # Note that you may need to change the location of perl (above) to reflect # where it lives on your box. # # The script relies on a .my.cnf file for usernames/passwords. It could # be tweaked to let a user input mysql usernames and passwords dynamically. # # If the .my.cnf user is root, it offers to allow a describe on all databases. # If not, the user must input the name of a database where they have appropriate # permissions for a describe. # # The script does a describe on each table, does some formatting (which is # not very sophisticated, long lines won't look pretty), and outputs the results # to the users local directory (from which they are running the script) # in a file with this pattern: databasename.dsc # # Naturally, it can be run locally, or put out for anyone on a server to use. # Don't forget to make it executable if you're not familiar with scripting... use DBI; $homedir = $ENV{HOME}; $input = $homedir.'/.my.cnf'; open (INFILE, "<$input") || die "Can't open hidden files\n"; while (<INFILE>){ chomp; @pair = split("=", $_); $mycnf{$pair[0]} = $pair[1]; } my $username = $mycnf{'user'}; my $hostname = $mycnf{'host'}; my $password = $mycnf{'password'}; if ($username eq "root"){ # if root, give them a list of dbs my $data_source = "DBI:mysql:mysql"; my $dbh = DBI->connect( $data_source, $username, $password ); if ( !defined $dbh ){ die "Cannot do \$dbh->connect: $DBI::errstr"; } my $query = qq(show databases); my $select_sql = qq{ $query }; my $select_sth = $dbh->prepare( $select_sql ); $select_sth->execute() or die "Unable to execute query: $dbh->errstr"; while(@ary = $select_sth->fetchrow() ){ $db = $ary[0]; unless($db eq 'mysql' || $db eq 'lost+found'){ push (@db, $db) } } $select_sth->finish(); $dbh->disconnect; $count = 1; foreach $database (@db){ print "$count - $database\n"; $count++; } print "Choose a number from above: "; $chosen = <STDIN>; chomp($chosen); unless($chosen eq "mysql"){ $chosen--; $chosen = @db[$chosen]; } }else{ # they're not root, let them choose one by typing it directly in print "Please input a database that you have access to: "; $chosen = <STDIN>; chomp($chosen); } my $data_source = "DBI:mysql:$chosen:$hostname"; my $dbh = DBI->connect( $data_source, $username, $password ) || die "\n\nYou do not have permission to access this database.\n\n\n"; if ( !defined $dbh ){ die "Cannot do \$dbh->connect: $DBI::errstr"; } open(OUTFILE, ">$chosen.dsc"); print OUTFILE "$chosen\n"; # Set up a query and prepare it... my $query = qq(show tables); my $select_sql = qq{ $query }; my $select_sth = $dbh->prepare( $select_sql ); $select_sth->execute() or die "Unable to execute query: $dbh->errstr"; while(@ary = $select_sth->fetchrow() ){ $table = $ary[0]; push (@tables, $table); } $select_sth->finish(); foreach $tb (@tables){ print OUTFILE "\n$tb\n"; my $query = qq(describe $tb); my $select_sql = qq{ $query }; my $select_sth = $dbh->prepare( $select_sql ); $select_sth->execute() or die "Unable to execute query: $dbh->errstr"; print OUTFILE '+------------------+---------------------------------+------+-----+------------+----------------+'."\n"; print OUTFILE '| Field | Type | Null | Key | Default | Extra |'."\n"; print OUTFILE '+------------------+---------------------------------+------+-----+------------+----------------+'."\n"; while(my ($fld, $type, $nul, $key, $dft, $xtra) = $select_sth->fetchrow() ){ printf OUTFILE "|%-18s|%-33s|%-6s|%-5s|%-12s|%-16s|\n", $fld, $type, $nul, $key, $dft, $xtra; } print OUTFILE '+------------------+---------------------------------+------+-----+------------+----------------+'."\n"; $select_sth->finish(); } $dbh->disconnect; exit; ********************************************************************************************************* --- Original message ---------- Subject: describe all tables Date: Sun, 27 Jan 2002 18:52:04 -0800 From: Michael Collins <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] Can "describe" be used to show columns from all tables in a database? All at once that is. I want to document all fields in all tables and find I need to display one table at a time. -- Michael __ ||| Michael Collins ||| ||| Kuwago Web Services ||| mailto:[EMAIL PROTECTED] ||| Seattle, WA, USA ||| http://www.lassodev.com --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php