mysql动态新增字段
使用PREPARE预处理语句动态新增字段,先判断表的字段是否存在,如果存在不新增,反之新增。
-- 1. 动态新增字段(储存过程)
; -- 结束符号
DROP procedure if EXISTS sp_add_column;
/*
动态新增字段,如果存在则不新增
tablename 表名
columnname 字段
add_sql 新增字段的语句
*/
create procedure sp_add_column(in tablename varchar(50),in columnname varchar(50), in add_sql VARCHAR(500))
BEGIN
-- MySQL判断字段是否存在
set @is_exists = (SELECT COUNT(*) FROM information_schema.columns WHERE TABLE_NAME = tablename AND COLUMN_NAME = columnname);
if @is_exists = 0 THEN
set @temp_sql = add_sql;
PREPARE stmt from @temp_sql;
EXECUTE stmt;
-- 执行
DEALLOCATE PREPARE stmt;
-- select add_sql;
END IF;
-- SELECT @tablename,@columnname,@is_exists, add_sql;
end
; -- 结束符号
CREATE TABLE if not EXISTS demo( id int(11) , PRIMARY KEY(id));
set @tablename = 'demo',@columnname = 'id3';
set @add_sql = CONCAT('ALTER TABLE ',@tablename,' add ',@columnname,' int(10) AFTER id; ');
-- select @add_sql;
call sp_add_column(@tablename,@columnname,@add_sql);
DESC demo;
-- DROP procedure if EXISTS sp_add_column;
-- 2. 动态新增字段(sql)
CREATE TABLE if not EXISTS demo( id int(11) , PRIMARY KEY(id));
set @tablename = 'demo',@columnname = 'id4';
set @add_sql = CONCAT('ALTER TABLE ',@tablename,' add ',@columnname,' int(10) AFTER id; ');
-- MySQL判断字段是否存在
set @is_exists = (SELECT COUNT(*) FROM information_schema.columns WHERE TABLE_NAME = @tablename AND COLUMN_NAME = @columnname);
set @temp_sql = (select case @is_exists WHEN 1 THEN ';' ELSE @add_sql END);
-- select @temp_sql;
PREPARE stmt from @temp_sql;
EXECUTE stmt;
-- 执行
DEALLOCATE PREPARE stmt;
DESC demo;
浙公网安备 33010602011771号