mysql增量語句如何修改表的字段
前言
1、數(shù)據(jù)庫增量語句:基于現(xiàn)有語句實現(xiàn)增量更新且多次執(zhí)行增量語句不會影響最終結(jié)果。即滿足冪等操作。
2、mysql似乎不支持不建立存儲過程/函數(shù)情況,直接執(zhí)行塊語句。。。這點有些無語
3、本文以存儲過程為例。
實現(xiàn)
思路
- 查詢是否滿足條件
- 執(zhí)行滿足條件的操作
- 刪除所有臨時變量
實現(xiàn)前提
-- 查詢當前庫表信息 SELECT * FROM information_schema. COLUMNS WHERE TABLE_SCHEMA = (SELECT DATABASE()) -- 查詢當前庫某表信息 SELECT * FROM information_schema. COLUMNS WHERE TABLE_SCHEMA = (SELECT DATABASE()) AND TABLE_NAME = '表名' -- 查詢當前庫某表某字段信息 SELECT * FROM information_schema. COLUMNS WHERE TABLE_SCHEMA = (SELECT DATABASE()) AND TABLE_NAME = '表名' AND COLUMN_NAME = '字段名' -- 刪除某個表字段(不能有引號) alter table 表名 drop column 字段名; -- 添加某個表字段(不能有引號) alter table 表名 add 字段名 varchar(128) comment '備注等'; -- 修改某個表字段(不能有引號) alter table 表名 change 舊字段名 新字段名 varchar(128) comment '備注等'; -- 實現(xiàn)用戶變量 SET @變量名='變量值'; SELECT @變量名; -- 實現(xiàn)條件語句(必須在代碼塊中) IF @變量='變量值' THEN SELECT @變量名; END IF; -- 刪除存儲函數(shù) DROP PROCEDURE IF EXISTS deptProc; -- 創(chuàng)建存儲函數(shù) DELIMITER // CREATE PROCEDURE deptProc() BEGIN SET @變量名='變量值'; SELECT @變量名; IF @變量='變量值' THEN SELECT @變量名; END IF; END// DELIMITER ; -- 調(diào)用存儲函數(shù) CALL deptProc();
增量添加某個字段
-- 刪除存儲過程 DROP PROCEDURE IF EXISTS testProc; DELIMITER // -- 創(chuàng)建存儲過程 CREATE PROCEDURE testProc() BEGIN -- 查詢條件 SELECT COUNT(*) into @y FROM information_schema. COLUMNS WHERE TABLE_SCHEMA = (SELECT DATABASE()) AND TABLE_NAME = '表名' AND COLUMN_NAME = '字段名'; -- 查詢條件 -- 判斷存在 IF @y=0 THEN alter table 表名 add 字段名 varchar(32) comment '備注等'; -- ELSEIF alter table 表名 change 字段名 字段名 varchar(32) comment '備注等'; END IF; -- 判斷存在 END //DELIMITER ; -- 調(diào)用存儲過程 CALL testProc(); -- 刪除存儲過程 DROP PROCEDURE IF EXISTS testProc;
增量修改某個字段
-- 刪除存儲過程 DROP PROCEDURE IF EXISTS testProc; DELIMITER // -- 創(chuàng)建存儲過程 CREATE PROCEDURE testProc() BEGIN -- 查詢條件 SELECT COUNT(*) into @y FROM information_schema. COLUMNS WHERE TABLE_SCHEMA = (SELECT DATABASE()) AND TABLE_NAME = '表名' AND COLUMN_NAME = '舊字段名'; -- 查詢條件 -- 判斷存在 IF @y=1 THEN alter table 表名 change 舊字段名 新字段名 varchar(32) comment '備注等'; -- ELSEIF @y =0 THEN alter table 表名 add 新字段名 varchar(32) comment '備注等'; END IF; -- 判斷存在 END //DELIMITER ; -- 調(diào)用存儲過程 CALL testProc(); -- 刪除存儲過程 DROP PROCEDURE IF EXISTS testProc;
增量刪除某個字段
-- 刪除存儲過程 DROP PROCEDURE IF EXISTS testProc; DELIMITER // -- 創(chuàng)建存儲過程 CREATE PROCEDURE testProc() BEGIN -- 查詢條件 SELECT COUNT(*) into @y FROM information_schema. COLUMNS WHERE TABLE_SCHEMA = (SELECT DATABASE()) AND TABLE_NAME = '表名' AND COLUMN_NAME = '舊字段名'; -- 查詢條件 -- 判斷存在 IF @y=1 THEN alter table 表名 drop 舊字段名; END IF; -- 判斷存在 END //DELIMITER ; -- 調(diào)用存儲過程 CALL testProc(); -- 刪除存儲過程 DROP PROCEDURE IF EXISTS testProc;
總結(jié)
1、增量語句寫法類似于編寫冪等接口,實現(xiàn)多次操作結(jié)果一致。
2、實例中多次使用存儲函數(shù)創(chuàng)建和刪除,實在是因為塊語句無法脫離存儲過程/函數(shù)執(zhí)行
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL 創(chuàng)建索引(Create Index)的方法和語法結(jié)構(gòu)及例子
MySQL 創(chuàng)建索引(Create Index)的方法和語法結(jié)構(gòu)及例子2009-07-07MySQL數(shù)據(jù)實時同步到MongoDB的實踐分享
很多 DBA 同學經(jīng)常會遇到要從一個數(shù)據(jù)庫實時同步到另一個數(shù)據(jù)庫的問題,同構(gòu)數(shù)據(jù)還相對容易,遇上異構(gòu)數(shù)據(jù)、表多、數(shù)據(jù)量大等情況就難以同步,我自己親測了一種方式可以實現(xiàn)MySQL數(shù)據(jù)實時同步到MongoDB,跟大家分享一下,希望對你有幫助2024-01-01mysql數(shù)據(jù)庫日志binlog保存時效問題(expire_logs_days)
這篇文章主要介紹了mysql數(shù)據(jù)庫日志binlog保存時效問題(expire_logs_days),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03MYSQL使用inner join 進行 查詢/刪除/修改示例
本文為大家介紹下使用inner join 進行查詢/刪除/修改,具體實現(xiàn)如下,學習mysql的朋也可以學習下,希望對大家有所幫助2013-07-07