通过存储过程进行对mysql 数据库表字段增加,修改,删除
USE `mydatasql`;
DROP PROCEDURE
IF EXISTS Pro_Temp_ColumnWork;
DELIMITER$$ -- 1表示新增列,2表示修改列类型,3表示删除列
CREATE PROCEDURE Pro_Temp_ColumnWork (
IN TableName VARCHAR (50),
IN ColumnName VARCHAR (50),
IN SqlStr VARCHAR (4000),
IN CType INT
)
BEGIN
DECLARE Rows1 INT;
SET Rows1 = 0;
SELECT
COUNT(*) INTO Rows1
FROM
INFORMATION_SCHEMA. COLUMNS
WHERE
table_schema = DATABASE ()
AND table_name = TableName
AND column_name = ColumnName;
-- 新增列
IF (CType = 1 AND Rows1 <= 0) THEN
SET SqlStr := CONCAT(
'ALTER TABLE ',
TableName,
' ADD COLUMN ',
ColumnName,
' ',
SqlStr
);
-- 修改列类型
ELSEIF (CType = 2 AND Rows1 > 0) THEN
SET SqlStr := CONCAT(
'ALTER TABLE ',
TableName,
' MODIFY ',
ColumnName,
' ',
SqlStr
);
-- 删除列
ELSEIF (CType = 3 AND Rows1 > 0) THEN
SET SqlStr := CONCAT(
'ALTER TABLE ',
TableName,
' DROP COLUMN ',
ColumnName
);
ELSE
SET SqlStr := '';
END
IF;
-- 执行命令
IF (SqlStr <> '') THEN
SET @SQL1 = SqlStr;
PREPARE stmt1
FROM
@SQL1;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
COMMIT;
END
IF;
END;
$$
DELIMITER ;
-- 注意注意再注意 $$ DELIMITER ; 分行写
-- 当前数据库 TableName表名 ColumnName列名
-- 新增列
CALL Pro_Temp_ColumnWork (
'aaa_copy',
'yuuttt1',
'int(10) NOT NULL DEFAULT 100',
1
);
CALL Pro_Temp_ColumnWork (
'aaa_copy',
'yuu3',
'varchar(50) DEFAULT NULL',
3
);
-- 注意注意注意 参数不要有单引号
-- call Pro_Temp_ColumnWork('aaa_copy','yuu3','int NOT NULL DEFAULT '33333' AFTER '下巴未过杠结束时间[s]';',1);
-- CALL Pro_Temp_ColumnWork ('表名','字段名','int(11) NULL DEFAULT NULL AFTER `xxxxxxxxxxx`; ', 1);
-- 删除列
-- CALL Pro_Temp_ColumnWork ('e_handcard_control','EntranceType','', 3);
-- 最后再执行一遍删除存储过程
DROP PROCEDURE
IF EXISTS Pro_Temp_ColumnWork;
惊喜无处不在:
如果使用Navicat执行可以成功,但是使用mysql source执行不成功,可以利用Navicat的 “美化 SQL”,惊喜自然来临