当前位置:首页 > My SQL > 正文内容

Mysql 批量设置未设置默认值字段的默认值。

Z先生9年前 (2016-09-21)My SQL6350
DROP PROCEDURE
IF EXISTS `sp_setdefaultvalue`;

CREATE PROCEDURE `sp_setdefaultvalue` (IN databasename VARCHAR(100))
BEGIN
	DECLARE
		s_tablename VARCHAR (100);

DECLARE
	s_fieldname VARCHAR (100);

DECLARE
	s_datatype VARCHAR (100);

DECLARE
	cur_table_structure CURSOR FOR SELECT
		table_name,
		column_name,
		data_type
	FROM
		INFORMATION_SCHEMA. COLUMNS
	WHERE
		table_schema = databasename
	AND column_default IS NULL
	ORDER BY
		table_name;

DECLARE
	CONTINUE HANDLER FOR SQLSTATE '02000'
SET s_tablename = NULL,
 s_fieldname = NULL,
 s_datatype = NULL;

OPEN cur_table_structure;

FETCH cur_table_structure INTO s_tablename,
 s_fieldname,
 s_datatype;


WHILE (s_tablename IS NOT NULL) DO

IF s_datatype = 'varchar'
OR s_datatype = 'char' THEN
	# 字符型默认值
SET @MyQuery = CONCAT(
	"alter table `",
	s_tablename,
	"` alter column `",
	s_fieldname,
	"` set default ''"
);

PREPARE MSQL
FROM
	@MyQuery;

EXECUTE MSQL;


ELSEIF s_datatype = 'int'
OR s_datatype = 'tinyint'
OR s_datatype = 'smallint'
OR s_datatype = 'mediumint'
OR s_datatype = 'integer'
OR s_datatype = 'bigint'
OR s_datatype = 'double'
OR s_datatype = 'float'
OR s_datatype = 'decimal'
OR s_datatype = 'numeric' THEN
	# 数字型默认值
SET @MyQuery = CONCAT(
	"alter table `",
	s_tablename,
	"` alter column `",
	s_fieldname,
	"` set default '0'"
);

PREPARE MSQL
FROM
	@MyQuery;

EXECUTE MSQL;


END
IF;

#USING @c; 
FETCH cur_table_structure INTO s_tablename,
 s_fieldname,
 s_datatype;


END
WHILE;

CLOSE cur_table_structure;


END


使用时只需要运行:

call sp_setdefaultvalue('数据库名称');


分享给朋友:

相关文章

浅谈 MySQL 中优化 SQL 语句查询常用的 30 种方法

1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎...

MySQL中InnoDB和MyISAM对比及索引原理区别

MySQL中InnoDB和MyISAM对比及索引原理区别

InnoDB和MyISAM是很多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,5.7之后就不一样了1、事务和外键InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并...

MYSQL横表变竖表

MYSQL横表变竖表

原始数据目标数据方法一:SQL语句:select name as '姓名',    max(case subject wh...

更改mysql默认引擎MyISAM|InnoDB

打开MySQL配置文件,Win下面默认是my.ini,Linux下面默认是my.conf[mysqld]下面加入(如果有则修改):default-storage-engine = ...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。