麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > MySQL > 正文

mysql創建存儲過程實現往數據表中新增字段的方法分析

2024-07-25 19:09:26
字體:
來源:轉載
供稿:網友

本文實例講述了mysql創建存儲過程實現往數據表中新增字段的方法。分享給大家供大家參考,具體如下:

需求:

往某數據庫的某個表中新增一個字段(若該字段已存在,則不做操作;若該字段不存在,則新增)

百度了n久,沒有符合要求的例子,只有參考加自己琢磨,最終終于給弄出來了,以下是幾個版本的更迭

第一版:

DELIMITER $$CREATE PROCEDURE insert_column()BEGINIF NOT EXISTS(SELECT 1 FROM information_schema.columnsWHERE table_schema='ltivalley' AND table_name='t_luck'AND column_name='sss' ) THENalter table ltivalley.t_luck add sss varchar(255) not Null;end if;END$$DELIMITER ;

此存儲過程可以做到往ltivalley數據庫的t_luck表中新增一個sss的字段,但寫死了,毫無靈活性,故沒用!

第二版:

DELIMITER $$CREATE PROCEDURE insert_column(in dbname varchar(255),in tbname varchar(255),in colname varchar(255))set @sql_1= concat("IF NOT EXISTS(SELECT 1 FROMinformation_schema.columns WHERE table_schema=",dbname,"AND table_name=",tbname," AND column_name=",colname,")THENalter table ",dbname,".",tbname," add ",colname,"varchar(255) not null;end if;");PREPARE stmt FROM @sql_1;EXECUTE stmt;DEALLOCATE PREPARE stmt;END$$DELIMITER ;

創建存儲過程沒有問題,但當調用的時候就會出錯,報 "IF"左右出錯,原因是在mysql中IF只能存在于存儲過程中,此處用EXECUTE stmt來執行,等于是不在存儲過程里面執行if語句,所以報錯,執行不了!故沒用!

第三版

DELIMITER $$CREATE PROCEDURE insert_column(in dbname varchar(255),in tbname varchar(255),in colname varchar(255))BEGINSET @selec=CONCAT('SELECT 1 FROM information_schema.columns WHERE table_schema="',dbname,'" AND table_name="',tbname,'" AND column_name="',colname,'"');PREPARE selec FROM @selec;SET @addcol=CONCAT('ALTER TABLE ',dbname,'.',tbname,' ADD ',colname,' VARCHAR(255)');PREPARE addcol FROM @addcol;IF NOT EXISTS(EXECUTE selec;)THENEXECUTE addcol;END IF;END$$DELIMITER ;

無法創建存儲過程,原因是在IF NOT EXISTS()中,不能執行EXECUTE selec語句,原因未知。故沒用!

終極版

DROP PROCEDURE IF EXISTS insert_column;DELIMITER $$CREATE PROCEDURE insert_column(in dbname varchar(255),in tbname varchar(255),in colname varchar(255))BEGINset @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,'"');PREPARE selec FROM @selec;EXECUTE selec;DEALLOCATE PREPARE selec;SET @addcol=CONCAT('ALTER TABLE ',dbname,'.',tbname,' ADD ',colname,' VARCHAR(255)');PREPARE addcol FROM @addcol;IF(@iscolexists=0)THENEXECUTE addcol;END IF;END$$DELIMITER ;

最終的結果,先執行EXECUTE selec,將結果存放到一個變量@iscolexists中,然后再在IF()中判斷@iscolexists的值,做相應操作。可用!

希望本文所述對大家MySQL數據庫計有所幫助。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲九草 | 国产精品久久久久久久av | 成人性生活视频在线播放 | 看毛片的网址 | 在线小视频国产 | 国产精品一品二区三区四区18 | 亚洲午夜影院在线观看 | av在线视 | 国产羞羞视频 | 欧美精品电影一区 | 色啪综合| 国产精彩视频在线 | 黄色特级片黄色特级片 | 草莓视频在线导航 | 国产午夜亚洲精品 | 久久免费视频一区 | 国产精品免费大片 | 极品xxxx欧美一区二区 | 黄色高清av | 亚洲第一精品在线 | 中文字幕免费一区 | 视频二区国产 | 精品在线观看一区 | a视频在线免费观看 | 日韩黄色av网站 | 极品美女一级毛片 | 国产1区2区3区在线观看 | 亚洲成人激情在线 | 成人毛片视频免费看 | 在线播放视频一区二区 | 亚洲91精品| 精品一区二区亚洲 | 欧美一级全黄 | www.com国产精品 | 91精品免费观看 | 婷婷久久综合九色综合色多多蜜臀 | av色哟哟| aa国产视频一区二区 | 中文字幕1区2区 | 久久久久久久久免费 | 国产精品久久久av |