国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 长葛市| 凤城市| 潢川县| 潼关县| 桐柏县| 凤冈县| 湘西| 柏乡县| 林甸县| 虎林市| 泰和县| 宁德市| 宁陵县| 永德县| 山西省| 麻江县| 甘洛县| 宜宾县| 茂名市| 渝中区| 昌平区| 蒙阴县| 治县。| 蒙山县| 吉安县| 靖西县| 班玛县| 化德县| 澎湖县| 阿荣旗| 弥渡县| 思南县| 利辛县| 绥芬河市| 石棉县| 梅州市| 大渡口区| 赤水市| 改则县| 九龙城区| 安顺市|