本文例項講述了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資料庫計有所幫助。