国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

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

2024-07-24 12:49:33
字體:
來源:轉載
供稿:網友

本文實例講述了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 ;

最終的結果,先執行

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 梅州市| 五大连池市| 新丰县| 新竹县| 镇巴县| 河南省| 新平| 东乡县| 文山县| 德清县| 南召县| 广平县| 颍上县| 潢川县| 休宁县| 眉山市| 柳林县| 黄山市| 琼中| 嘉义县| 临高县| 古浪县| 巴楚县| 安乡县| 肇源县| 公主岭市| 谷城县| 黑山县| 通渭县| 昌乐县| 阿坝| 耿马| 穆棱市| 新巴尔虎左旗| 麻城市| 邹平县| 洪江市| 南宫市| 雷山县| 大同县| 仙桃市|