Webで動作するシステムをユーザー単位でDBを作成し、管理しようと思うのですが、(1)DBを作成するプロシージャというものは作成できるのでしょうか?
(2)というかそのようなWebシステムを作成したい場合、1ユーザーにつき1DBという管理方法で正しいのでしょうか?
(3)1ユーザーにつき1DBの場合、MYSQLのDBはMY.INIで設定されたメモリを超えない範囲ならいくつでもDBを作成できるのでしょうか?
(4)そして作成するプロシージャを作成する場合、以下のような感じでINパラメータのusernameをプレフィックス「DB_」の後ろにつけて作成しようと思うのですが、その場合パラメータをDB_の後ろに連結するにはどのように記述したらよいのでしょう?
userkanridb:ユーザを管理しているメインのDB。ここにプロシージャを作成しようと思っています。
DELIMITER $$
DROP PROCEDURE IF EXISTS `userkanridb`.`newDB` $$
CREATE PROCEDURE `userkanridb`.`newDB` (in username integer(8))
BEGIN
DROP TABLE IF EXISTS `DB_`.`mConfig`;
CREATE TABLE `DB_`.`mCconfig` (
`shime` int(2) NOT NULL,
`usernm` varchar(20) NOT NULL,
`style` tinyint(1) NOT NULL,
`message` varchar(20) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
END $$
DELIMITER ;
ご伝授御願いします。
MySQLのバージョン:MYSQL5.0.51
No.1ベストアンサー
- 回答日時:
自動に登録されるユーザー毎にデータベースの別エリアを割り当てて操作するWebシステムを作成した事がありますが、経験的には、データベースをそれぞれのユーザー毎に割り当てるより、それぞれのユーザー毎に別テーブルを割り当てる方式の方が便利かと思います。
例)
・ユーザー a さん用のテーブル
a_table1, a_table2, ...
・ユーザー b さん用のテーブル
b_table1, b_table2, ...
当方、WEBシステム自体はphpで作成しましたが、データベース自体が違うと、コネクトから別に接続しなければいけなくなります。また、自動に登録されたユーザー毎にデータベースを作成する部分は、システムコマンドを連動させて動かさなければ出来ないのではと思います。
テーブルに修正が発生した場合も、ユーザー毎にテーブルが違うだけであれば、WEBシステム上から一律全ユーザーのテーブルを更新するロジックも作りやすいので、メンテナンスも楽でした。
以上、参考までに。
経験がある方のご意見大変参考になりました、ありがとうございます。
ユーザーごとのDBではなくてひとつのDBにユーザー判別のプレフィックスをつけて各テーブルをまとめて作成すればメンテナンス上も良いということですね。
その場合、
パラメータでユーザ判別するプレフィックスをパラメータで渡すには
どのように記述したらよいでしょうか?
MySQLのプロシージャに関して情報が少ないので質問させていただきます。
・[*****]の部分に名前パラメータ(:in username varchar(8))を連結させたい
・programDb:メインのDB
DELIMITER $$
CREATE PROCEDURE `newTableset`(in username varchar(8))
BEGIN
DROP TABLE IF EXISTS `programDb`.`[*****]mConfig`;
CREATE TABLE `programDb`.`[*****]mConfig` (
`shime` int(2) NOT NULL,
`usernm` varchar(20) NOT NULL,
`style` tinyint(1) NOT NULL,
`message` varchar(20) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `programDb`.`[*****]mList` (
・・・
END $$
DELIMITER ;
No.3
- 回答日時:
ANo.1です。
>パラメータでユーザ判別するプレフィックスをパラメータで渡すに
>はどのように記述したらよいでしょうか?
>MySQLのプロシージャに関して情報が少ないので質問させていただ
>きます。
MySQLでストアドプロシージャの使用経験が無いので当方も判りません。
しかしテーブルの作成であれば、ストアドプロシージャでなく、通常の create teble 文を動的に作成してWEBシステムを作成する言語のmysql用のquery用関数(ルーチン)から発行して作成すれば良いのではないでしょうか。
今まで作成したことのあるシステムではまとまったクエリはプロシージャを作成していたので、プロシージャでできないものかとウェブ上を探しておりました。
通常のDB用の関数を用いてCREATE文を流すようにします。
助言いただき、ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- PHP php エラー 2 2022/10/23 16:43
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Visuaal Studio Community 2022...
-
Oracleのsystem表領域について
-
他のデータベースとのテーブル結合
-
Accessで2種類のデータベースを...
-
ODBCの設定について
-
2台のサーバー間でのテーブル...
-
データベースを複数作ったほう...
-
Microsoft Access:クエリのフ...
-
Accessでテーブルを外だしにす...
-
データベースとテーブルを作成...
-
ODBC データソース選択画面が...
-
テーブル単位のエクスポート、...
-
SQliteの日付検索について
-
AccessとSqlServerのテーブルリ...
-
ブログなどのカレンダーって、...
-
Notion@リレーション値の取得...
-
Accessでデータシートに同じデ...
-
SELECT 文の NULL列は?
-
SQLにて指定日付より前、かつ最...
-
ROWNUMでUPDATEをしたいのです...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
他のデータベースとのテーブル結合
-
Notion@リレーション値の取得...
-
SQliteの日付検索について
-
QSL でのフォーム画面作成について
-
2台のサーバー間でのテーブル...
-
Visuaal Studio Community 2022...
-
Microsoft Access:クエリのフ...
-
Accessで2種類のデータベースを...
-
データベースを複数作ったほう...
-
ACCESS アクセスで他のデータ...
-
カラムが不定なデータベースの...
-
Oracleのsystem表領域について
-
テーブル単位のエクスポート、...
-
PHPとMySQLを使った掲示板の作り方
-
[1000地域 × 10カテゴリー = 1...
-
コマンドラインオプションにパ...
-
Access 外部MDBのリンクテーブ...
-
ACCESS(VBA)について
-
バッチファイルを使ったテーブ...
-
【SQL Server】ローカルにDB構築
おすすめ情報