1. 如果不存在,就新增;用儲存過程解決,定義成模板,可以通用;
應用場景:必須擁有建立儲存過程的許可權
delimiter $$
use `ebt_shop_test`$$
drop
procedure
ifexists
`addfieldifnotexists`$$
drop function if
exists
`isfieldexisting`$$
create function isfieldexisting (
table_name_in varchar(100),
field_name_in varchar(100)
)returns int
return (
select
count(column_name)
from information_schema.columns
where table_schema = database()
and table_name = table_name_in
and column_name = field_name_in)$$
create
procedure addfieldifnotexists (
in table_name_in varchar(100),
in field_name_in varchar(100),
in field_definition_in varchar(100)
)begin
set @isfieldthere = isfieldexisting(table_name_in, field_name_in);
if (@isfieldthere = 0) then
set @ddl = concat('alter table ', table_name_in);
set @ddl = concat(@ddl, '', 'add column') ;
set @ddl = concat(@ddl, '', field_name_in);
set @ddl = concat(@ddl, '', field_definition_in);
prepare stmt from @ddl;
execute stmt;
deallocate prepare stmt;
endif;end$$
delimiter ;
【說明】使用了 「delimiter $$ … … delimiter ;」 分塊語法,在此定義區域內的語句作為整體一併提交給伺服器
呼叫新增列,例如:
-- call procedure
addfield
ifnot
exists
call
addfieldifnotexists
('dic_data', 'parentid', 'varchar(50) null comment \'父id\'');
-- clean work
drop procedure
ifexists `addfieldifnotexists`;
drop function
ifexists `isfieldexisting`;
2.另一種方式: 如果不存在,就新增如果沒有許可權建立函式和儲存過程時,一種更直接的方式,直接寫可執行的sql語句編譯執行
應用場景:有受許可權限制,每次都直接編寫相應的sql語句即可
set @exeresult = (select
if( (select
count(*)
from information_schema.columns
where table_schema = database()
and table_name = 'dic_data'
and column_name = 'isleaf1'
) > 0,
'select 1 as result',
'alter table dic_data add column isleaf1 char(1) comment \'是否為葉子節點\' null after parentid'
));prepare stmt from @exeresult;
execute stmt;
deallocate prepare stmt;
【語法解析】:
@exeresult: 臨時變數定義的方式
if(boolean表示式, param1,param2):相當於程式中的三元表示式
prepare:預編譯sql語句
execute:執行sql語句
deallocate:清除預編譯的語句
eg:
prepare stmt1 from
'select sqrt(pow(?,2) + pow(?,2)) as hypotenuse';
set@a = 3;
set@b = 4;
execute stmt1 using
@a, @b;
deallocate
prepare stmt1;
3.安全地刪除列,也可以先進行判斷而後進行操作
set @exeresult = (select
if( (select
count(*)
from information_schema.columns
where table_schema = database()
and table_name = 'dic_data'
and column_name = 'isleaf1'
) > 0,
'alter table dic_data drop column isleaf1',
'select 0 as result'
));prepare stmt from @exeresult;
execute stmt;
deallocate prepare stmt;
ceph osd新增和移除
前段時間客戶那邊有台機器的的硬碟全部掛掉,導致上面的檔案系統也全部掛掉,換上新硬碟後需要重新新增osd,下面是詳細步驟 需要注意的是,操作盡量選在晚上10 30之後。先將down掉的osd程序刪掉 具體命令如下 service ceph stop osd.ceph osd out osd.ceph ...
移除mysql服務 安裝 移除 MySQL 服務
以下內容使用的版本為 mysql 5.7.17 win32.zip 參考 mysqld 設定3306埠 port 埠號,預設3306 設定mysql的安裝目錄 basedir 當前目錄路徑 設定mysql資料庫的資料的存放目錄 datadir 資料儲存目錄路徑 允許最大連線數 max connect...
JS事件 新增 移除事件
element.addeventlistener event,function,usecapture 方法用於向指定元素新增事件控制代碼。event 必須。字串,指定事件名。注意 例 使用 click 而不是使用 onclick function 觸發函式 usecapture 可選。布林值,指定事...