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

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql創(chuàng)建存儲過程實(shí)現(xiàn)往數(shù)據(jù)表中新增字段的方法分析

2024-07-25 19:09:26
字體:
供稿:網(wǎng)友

本文實(shí)例講述了mysql創(chuàng)建存儲過程實(shí)現(xiàn)往數(shù)據(jù)表中新增字段的方法。分享給大家供大家參考,具體如下:

需求:

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

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

第一版:

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數(shù)據(jù)庫的t_luck表中新增一個(gè)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 ;

創(chuàng)建存儲過程沒有問題,但當(dāng)調(diào)用的時(shí)候就會出錯(cuò),報(bào) "IF"左右出錯(cuò),原因是在mysql中IF只能存在于存儲過程中,此處用EXECUTE stmt來執(zhí)行,等于是不在存儲過程里面執(zhí)行if語句,所以報(bào)錯(cuò),執(zhí)行不了!故沒用!

第三版

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 ;

無法創(chuàng)建存儲過程,原因是在IF NOT EXISTS()中,不能執(zhí)行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 ;

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

希望本文所述對大家MySQL數(shù)據(jù)庫計(jì)有所幫助。


注:相關(guān)教程知識閱讀請移步到MYSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 什邡市| 富锦市| 蕲春县| 临朐县| 高唐县| 岳普湖县| 肥东县| 昌平区| 德清县| 错那县| 乐都县| 抚远县| 泽普县| 饶河县| 阿尔山市| 潮安县| 平和县| 广平县| 日土县| 项城市| 视频| 庆阳市| 鸡西市| 天台县| 贵州省| 萨嘎县| 榆中县| 秦安县| 岳普湖县| 黄山市| 灯塔市| 固镇县| 通海县| 莆田市| 福清市| 屯昌县| 镇安县| 无极县| 肇源县| 陵川县| 太保市|