婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > mysql創建存儲過程實現往數據表中新增字段的方法分析

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

熱門標簽:如何在高德地圖標注新地址 高德地圖標注中心個人注冊 400電話辦理都選易號網 電銷機器人針對的 寶應電信400電話辦理費用 外呼系統服務 高德地圖標注模式 湘潭電銷機器人咨詢電話 外呼系統防封號違法嗎

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

需求:

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

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

第一版:

DELIMITER $$
CREATE PROCEDURE insert_column()
BEGIN
IF NOT EXISTS(SELECT 1 FROM information_schema.columns
WHERE table_schema='ltivalley' AND table_name='t_luck'
AND column_name='sss' ) THEN
alter 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 FROM
information_schema.columns WHERE table_schema=",dbname,"
AND table_name=",tbname," AND column_name=",colname,")
THEN
alter 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))
BEGIN
SET @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;)THEN
EXECUTE 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))
BEGIN
set @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)THEN
EXECUTE addcol;
END IF;
END
$$
DELIMITER ;

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

更多關于MySQL相關內容感興趣的讀者可查看本站專題:《MySQL存儲過程技巧大全》、《MySQL常用函數大匯總》、《MySQL日志操作技巧大全》、《MySQL事務操作技巧匯總》及《MySQL數據庫鎖相關技巧匯總》

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

您可能感興趣的文章:
  • Mysql中批量替換某個字段的部分數據(推薦)
  • mysql 替換字段部分內容及mysql 替換函數replace()
  • mysql查詢字段類型為json時的兩種查詢方式
  • MySQL group by對單字分組序和多字段分組的方法講解
  • MySQL中可為空的字段設置為NULL還是NOT NULL
  • MySQL中字段類型char、varchar和text的區別
  • MySQL根據某一個或者多個字段查找重復數據的sql語句
  • 簡單了解mysql存儲字段類型查詢效率

標簽:蘭州 黃山 馬鞍山 黔南 賀州 南充 佛山 宿遷

巨人網絡通訊聲明:本文標題《mysql創建存儲過程實現往數據表中新增字段的方法分析》,本文關鍵詞  mysql,創建,存儲,過程,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《mysql創建存儲過程實現往數據表中新增字段的方法分析》相關的同類信息!
  • 本頁收集關于mysql創建存儲過程實現往數據表中新增字段的方法分析的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 鄂托克前旗| 广东省| 岑溪市| 射阳县| 隆化县| 镇安县| 达州市| 大宁县| 涟源市| 隆子县| 卢龙县| 同仁县| 璧山县| 大兴区| 容城县| 田东县| 阿克| 娱乐| 邵东县| 沙河市| 仁寿县| 宁河县| 福泉市| 历史| 织金县| 扶风县| 手机| 莱西市| 巴青县| 高陵县| 凌海市| 同心县| 皋兰县| 重庆市| 商洛市| 阜阳市| 和顺县| 湛江市| 根河市| 平潭县| 云林县|