perlでMySQLデータベースへのデータ挿入、データ取得するためのコードをメモ

やりたいことと環境

perlを使って、MySQLサーバのデータベースにデータを挿入し、さらに挿入した値をデータベースから取得してターミナル上に表示します。MySQLサーバはLinux Mint 16上に構築し、以降に載せるperlコードも同じLinux Mint 16上で実行しました。

準備

LAMPサーバのインストール

ここでは、準備としてMySQLサーバの構築とテーブルの作成手順をメモします。不要な方は飛ばして下さい。
MySQLサーバの構築とはいうものの、ここではLAMP環境の構築をもってMySQLサーバの構築とします。LAMP環境を構築するために以下のコマンドを実行します。


taskselは、色々なサーバソフトウェアを簡単にインストールして構築するためのコマンドです。インストールしたら、以下で実行します。


以下のような画面が表示されるので、中からインストールしたいサーバソフトウェアを選択してチェックを入れ(十字キーでカーソル移動、スペースでチェックできます)、TABを押して「OK」します。私はLAMP以外にもSamabaとVirtualHostを入れたかったので、以下の画面ではチェックが入っています。LAMP環境だけを構築する場合は「LAMP Server」にだけチェックを入れればOKです。
tasksel_select_server

なお、「OK」を押した後に以下のようなエラーが出る場合は、「sudo apt-get update」を実行してから再度上記のtaskselコマンドを実行してみて下さい。


インストール途中で、以下のようにMySQLのrootユーザに対するパスワードを聞いてくるので、適当に入力してOKします。ここで入力したパスワードは後で使用します。
mysql_root_pass

パスワードを再入力するよう言われるので入力します。
mysql_root_pass_retype

以上でLAMP環境のインストールは完了です。これでMySQLサーバとして使えます。

MySQLサーバでデータベースを作成

続いてMySQLにログインしてデータベースを作成しておきます。以下のコマンドでMySQLにログインします。


するとrootに対するパスワードを求められるので、インストール時に入力したパスワードを入力します。入力すると、以下のように表示されます。ここでSQLを実行していきます。


以下のコマンドを実行して新しくデータベースを作成します。以下では「TestDatabase」という名前のデータベースを作成しています。データベース作成が完了したら、「exit」コマンドでログアウトします。

これでMySQLサーバの準備は完了です。後は、perlでMySQLを操作するためのモジュールをインストールします。

DBIモジュールのインストール

perlからMySQLを操作するために「DBI」というモジュールを使います。インストールは以下のコマンドを実行して完了です。

これで準備は完了です。

perlのコード

以下のコードは、上記の準備で作成したデータベース「TestDatabase」内に「testtable」というテーブルを作成し、配列に用意したデータをtesttableに挿入します。また、挿入したデータをtesttableから取得して、ターミナル上に表示します。自己責任での使用をお願い致します。


DBIを使ったMySQLの基本的な操作方法

DBIでのMySQLの基本的な操作は、SQL文を用意して実行するだけです。ただ、参考にさせて頂いたサイトにも書いてありましたが、SQL文を実行する場合はSQL文によって以下の2通りがあります。

  • select文はprepareメソッドでSQL文を準備してからexecuteメソッドで実行
  • select文以外はdoメソッドで直接実行

以降で上記コード内にある各SQL文と絡めてこの2通りについてメモします。

createによるテーブル作成

28行目では「create」を使ったテーブル作成のためのSQL文を定義しています。ここでは、int型の「id」、text型の「url」、text型の「description」というデータ列を作成しています。テーブル作成のcreateコマンドは以下のように使用します。

28行目ではテーブル作成の条件として「if not exists」を指定しており、指定したテーブルが存在しなかった場合にのみ作成しています。そしてこのSQL文をdoメソッドによって実行しています。


truncateによるデータ削除

32行目では「truncate」を使ったテーブル内のデータを全て削除するためのSQL文を定義しています。

なお、データの削除は「delete」によっても可能ですが、テーブル内の全てのデータを削除する場合はtruncateの方が処理が高速なようです。一方で、deleteは削除するデータの条件指定が可能です。例えば、以下のような感じです。

上記のdelete文によって、指定したデータ列名の中のレコードのうち、値が範囲1から範囲2の間にあるレコードが存在する行を削除します。truncateとdeleteの違いについては、以下のサイトに詳しく書いてあり、参考になりました。

TRUNCATE と DELETE の違い | SHIFT the Oracle 


insertによるデータ挿入

39行目では「insert」を使ったデータ挿入のためのSQL文を定義しています。insertは以下のように使用します。


selectによるデータ取得

47行目では「select」によるデータ取得のためのSQL文を定義しています。以下のselect文を実行することで、指定したテーブルに存在する全てのデータを取得できます。

なお、取得するデータの条件指定をしたい場合は、deleteの場合と同様にwhereを使用できます。

そしてselect文はdoメソッドではなく、まず50行目のprepareメソッドで準備をして、その後で53行目のexecuteを使って実行します。また、select文の実行結果を56行目の「fetchrow_array」を使用して配列に格納しています。

実行結果

上記のperlコードを実行すると、ターミナル上に以下の出力が得られます。


参考サイト様

このエントリーをはてなブックマークに追加

SPONSORED LINK

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL