この記事では、例を使用して、MySQL でストアド プロシージャを作成し、データ テーブルに新しいフィールドを追加する方法について説明します。ご参考までに、詳細は以下の通りです。 必要: データベースのテーブルに新しいフィールドを追加します (フィールドが既に存在する場合は何も実行されません。フィールドが存在しない場合は新しいフィールドが追加されます) 長い間Baiduを検索しましたが、要件を満たす例はありませんでした。参照して自分で理解するしかありませんでした。ついに、私はそれを理解しました。以下はいくつかのバージョンの変更点です。 初版: 区切り文字 $$ CREATE PROCEDURE insert_column() 始める 存在しない場合(information_schema.columnsから1を選択) table_schema='ltivalley' かつ table_name='t_luck' の場合 かつ、column_name='sss' ) の場合 テーブル ltivalley.t_luck を変更し、 sss varchar(255) を Null 以外に追加します。 終了の場合; 終わり $$ 区切り文字 ; このストアド プロシージャは、ltivalley データベースの t_luck テーブルに新しい sss フィールドを追加できますが、デッドコードされており柔軟性がないため、役に立ちません。 第2版: 区切り文字 $$ CREATE PROCEDURE insert_column(in dbname varchar(255),in tbname varchar(255),in colname varchar(255)) @sql_1 を concat("存在しない場合は(SELECT 1 FROM information_schema.columns WHERE table_schema=",dbname," AND テーブル名=",tbname," AND 列名=",colname,") それから テーブル ",dbname,".",tbname," を変更し、",colname," を追加します。 varchar(255) は null ではありません。 終了if;"); @sql_1 からステートメントを準備します。 ステートメントの実行; DEALLOCATE PREPARE ステートメント; 終わり $$ 区切り文字 ; ストアド プロシージャの作成には問題はありませんが、呼び出し時にエラーが発生し、「IF」の前後でエラーが報告されます。これは、MySQL では、IF はストアド プロシージャ内にしか存在できないためです。ここで EXECUTE stmt を使用して実行すると、ストアド プロシージャ内の if ステートメントを実行しないのと同じになるため、エラーが報告され、実行できません。だから無駄だよ! 第3版 区切り文字 $$ CREATE PROCEDURE insert_column(in dbname varchar(255),in tbname varchar(255),in colname varchar(255)) 始める SET @selec=CONCAT('SELECT 1 FROM information_schema.columns WHERE table_schema="',dbname,'" AND table_name="',tbname,'" AND column_name="',colname,'"'); @selec から selec を準備します。 SET @addcol=CONCAT('ALTER TABLE ',dbname,'.',tbname,' ADD ',colname,' VARCHAR(255)'); addcol を @addcol から準備します。 存在しない場合(選択を実行) addcol を実行します。 終了の場合; 終わり $$ 区切り文字 ; 不明な理由により、EXECUTE 選択ステートメントを IF NOT EXISTS() で実行できないため、ストアド プロシージャを作成できません。だから無駄だよ! アルティメットエディション insert_column が存在する場合はプロシージャを削除します。 区切り文字 $$ CREATE PROCEDURE insert_column(in dbname varchar(255),in tbname varchar(255),in colname varchar(255)) 始める @iscolexists = 0 に設定します。 SET @selec=CONCAT('SELECT count(*) into @iscolexists FROM information_schema.columns WHERE table_schema="',dbname,'" AND table_name="',tbname,'" AND column_name="',colname,'"'); @selec から selec を準備します。 選択を実行してください。 DEALLOCATE PREPARE を選択します。 SET @addcol=CONCAT('ALTER TABLE ',dbname,'.',tbname,' ADD ',colname,' VARCHAR(255)'); addcol を @addcol から準備します。 IF(@iscolexists=0)の場合 addcol を実行します。 終了の場合; 終わり $$ 区切り文字 ; 最終結果については、まず MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL ストアド プロシージャ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、および「MySQL データベース ロック関連スキルの概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: SSH経由でリモートLinuxシステムでコマンドを実行する方法
>>: Node.js でのクラスター作成に関する簡単な説明
1. 堂々巡りいろいろ試行錯誤した結果、均等割り付けレイアウトを実現する最も簡単な方法は CSS ...
序文Mac システムのターミナルでファイルの権限を変更するには、Linux の chmod コマンド...
この記事では、MacOSでのMySQL 8.0.18のインストールと成功したコマンドライン操作を記録...
reduceメソッドは配列の反復メソッドです。 mapやfilterとは異なり、 reduceメソッ...
次の2つのファイルを結合するには、それらを結合して1.txtに結合します。 # 1.txt ジェリー...
はじめに: Web ページを作成するときに、画像をアップロードする必要がある場合がよくあります。画像...
背景情報最近、Windows パフォーマンスに関する本を読み直しています。以前は SCOM 監視を使...
この記事では、audioContextを介して3Dサウンド効果を実現するためのjsの具体的なコードを...
序文ゲートウェイプロジェクトを開発する場合、署名 sign_key 情報はリクエスト時にリクエスト ...
この記事の例では、すべてのチェックボックスの選択を実現するためのJavaScriptの具体的なコード...
1. Workstationで仮想マシンのハードウェアバージョンを変更するWorkstation ...
データベースのパフォーマンスに関する話面接では、「データベースにどのくらい精通していますか?」など、...
この記事では、例を使用して、MySQL で GROUP_CONCAT を使用する方法について説明しま...
目次1. Dockerファイル2. pom 構成3. イメージプッシュ4. k8s デプロイメント前...
Kubernetes は、アプリケーションの移植性とハイブリッド クラウド/マルチクラウドの展開をサ...