公司要求将整个数据库的varchar或者char的默认值清空,为减少时间写了以下存储过程。
DECLARE s_fieldname VARCHAR(100);
/*显示表的数据库中的所有表
SELECT table_name FROM information_schema.tables WHERE table_schema='databasename' Order by table_name ;
*/
#显示所有varchar的字段
DECLARE cur_table_structure CURSOR
FOR
SELECT table_name,column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'databasename' AND (data_type ='varchar' OR data_type ='char') AND column_default IS NOT NULL
ORDER BY table_name;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s_tablename = NULL,s_fieldname=NULL;
OPEN cur_table_structure;
FETCH cur_table_structure INTO s_tablename,s_fieldname;
WHILE ( s_tablename IS NOT NULL) DO
SET @MyQuery=CONCAT("alter table `",s_tablename,"` alter column `",s_fieldname,"` drop default");
PREPARE msql FROM @MyQuery;
EXECUTE msql ;#USING @c;
FETCH cur_table_structure INTO s_tablename,s_fieldname;
END WHILE;
CLOSE cur_table_structure;
END$$