MySQL:テーブルに特定のカラムが無ければ追加

| コメント(0) | トラックバック(0)
SQLだけでこういう処理をする方法が調べてもわからないので、スクリプト側でチェックしてみる。

メイン
------------------------------------------------------------------------------------------
#!/usr/bin/perl -w

use strict;
use DBI;
require './db.pl';

&db::open();

 my $table = 'table_name';
 ##追加カラム情報セット
 my @add = (
  ['field1' ,'INT' ],
  ['field2' ,'VARCHAR(255)' ],
  ['field3' ,'DATE' ],
  ['field4' ,'INT', ],
  ['field5' ,'VARCHAR(255)' ],
  ['field6' ,'VARCHAR(255)' ],
  ['field7' ,'INT' ]
 );
 my $cols = '';
 ##現在のテーブル情報を取得
 &db::query("DESCRIBE $table");
 while(my $href = $db::sth->fetchrow_hashref()){
  ##カラム名をセット
  $cols .= '<>'.$href->{'Field'}.'<>';
 }
 ##無ければ追加
 foreach(@add){
  if($cols !~ /<>$_[0]<>/){
    &db::query("ALTER TABLE $table ADD $_[0] $_[1]");
  }
 }

&db::close();
exit;
---------------------------------------------------------------------------------------



DB接続(db.pl)
---------------------------------------------------------------------------------------
package db;

use strict;

sub open{
my $dbs = "DBI:mysql:dbname:dbhost";
our $dbh = DBI->connect($dbs,dbuser,dbpass);
if(!$dbh){
die "データベースに接続できません";
}
}

sub query{
my ($sql) = @_;
our $sth = $db::dbh->prepare($sql) || die $db::dbh->errstr();
my $exec = $sth->execute || die $sth->errstr();
return $exec;
}

sub close{
$db::sth->finish;
$db::dbh->disconnect;
}

1;
---------------------------------------------------------------------------------------

トラックバック(0)

トラックバックURL: http://www.igreks.jp/blog/mt-tb.cgi/395

コメントする