MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでテーブルを動的に作成する方法(ストアドプロシージャ活用)

MySQLでテーブルを動的に作成したい場合は、ストアドプロシージャを利用するのが便利です。この記事では、StudentId(int型)とStudentName(varchar型)の2つのカラムを持つテーブルを、任意のテーブル名で動的に生成する手順を解説します。

ストアドプロシージャの作成

まず、テーブル名を引数として受け取り、動的にCREATE TABLE文を組み立てて実行するストアドプロシージャを作成します。

mysql> DELIMITER $$
mysql> CREATE PROCEDURE creatingDynamicTableDemo(yourTableName VARCHAR(200))
    -> BEGIN
    ->     SET @name = yourTableName;
    ->     SET @st = CONCAT('
    ->         CREATE TABLE IF NOT EXISTS `', @name, '` (
    ->         `StudentId` int UNSIGNED NOT NULL AUTO_INCREMENT,
    ->         `StudentName` varchar(20) NOT NULL,
    ->         PRIMARY KEY (`StudentId`)
    ->     )
    -> ');
    -> PREPARE myStatement FROM @st;
    -> EXECUTE myStatement;
    -> DEALLOCATE PREPARE myStatement;
    -> END $$
Query OK, 0 rows affected (0.16 sec)
mysql> DELIMITER ;

このプロシージャでは、StudentIdをPRIMARY KEY(主キー)に設定し、AUTO_INCREMENTによる自動採番を有効にしています。また、CREATE TABLE IF NOT EXISTSを使用することで、同名のテーブルが既に存在する場合でもエラーを回避できる点がポイントです。

ストアドプロシージャの実行

作成したストアドプロシージャは、CALLコマンドで呼び出します。引数に作成したいテーブル名を指定してください。

mysql> call creatingDynamicTableDemo('DemoTable');
Query OK, 0 rows affected, 1 warning (0.65 sec)

テーブル構造の確認

テーブルが正しく作成されたかどうかは、DESC文で確認できます。

mysql> desc DemoTable;

出力結果

上記のコマンドを実行すると、以下のような出力が得られます。

+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| StudentId   | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| StudentName | varchar(20)      | NO   |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

実装のポイント

動的テーブル作成における重要な要素は次の3点です。

  • PREPARE / EXECUTE:CONCAT関数で組み立てたSQL文字列をプリペアドステートメントとして準備し、実行します。
  • DEALLOCATE PREPARE:使用後のステートメントを明示的に解放することで、リソースを適切に管理できます。
  • DELIMITER の変更:ストアドプロシージャ内のセミコロンと区別するため、一時的にデリミタを$$へ変更しています。
  1. MySQLストアドプロシージャで一時テーブル(TEMPORARY TABLE)を作成する方法

    MySQLストアドプロシージャで一時テーブルを作成する基本構文MySQLのストアドプロシージャ内で一時テーブル(TEMPORARY TABLE)を作成する場合、基本となる構文は以下の通りです。CREATE PROCEDURE yourProcedureName() BEGIN CREATE TEMPORARY TABLE yourTemporaryTableName SELECT yourValue; ENDストアドプロシージャの作成例それでは、実際にこの構文を使って一時テーブルを作成し、テーブルにレコードを挿入してみましょう。まずは、一時テーブルを作成するストアドプロシージャを定義す

  2. MySQLでAUTO_INCREMENTの開始値を手動で指定してテーブルを作成する方法

    MySQLでAUTO_INCREMENTの開始値を手動で指定してテーブルを作成する方法MySQLでは、テーブル作成時にAUTO_INCREMENTオプションを指定することで、連番の開始値を任意の数値に設定できます。これにより、IDを100や1000など、特定の値から採番することが可能になります。以下の手順で、開始値を100に設定したAUTO_INCREMENTカラムを持つテーブルを作成し、その動作を確認してみましょう。1. テーブルの作成まず、AUTO_INCREMENT=100を指定してテーブルを作成します。mysql> create table DemoTable1907 (