MySQL数据库之数据类型集合类型和枚举类型测试环境
【导读】
针对四种数据类型:布尔类型BOOL或称布尔类型BOOLEAN、微整型TINYTINT、枚举类型ENUM、集合类型SET,我们已经分多篇文章篇幅给出详细的介绍与功能测试数据,接下来我们深入介绍枚举类型EUNM和集合类型SET。测试基于InnoDB存储引擎上,对MySQL数据库集合类型SET和枚举类型ENUM的字段进行DDL变更操作,是否需要重新创建表呢?对数据库的事务处理有何影响?对数据库的数据服务提供有何性能影响?
(一) 系统环境
硬件:DELL R510 10块盘做的RAID5,上面跑了几十台虚拟机
操作系统:CentOS release 5.5 (Final)
MySQL数据库:5.5.15-log
InnoDB存储引擎:plugin-InnoDB 1.1.8
(二) 测试数据准备
1>.创建表结构的SQL命令
CREATE DATABASE mysqlops CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; USE mysqlops; CREATE TABLE `mysqlops_set_enum_bk` ( `ID` INT NOT NULL AUTO_INCREMENT, `Work_Option` set('JavaScript','DBA','SA','C++','NA','QA','Java','PHP','','Python'), `Work_City` set('shanghai','beijing','hangzhou','shenzhen','guangzhou','xiamen','tianjin','qingdao','dalian','xian','other') NOT NULL DEFAULT 'shanghai', PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 2>.用于分隔字符串的函数代码
USE mysqlops; DELIMITER $$ DROP FUNCTION IF EXISTS fun_split $$ CREATE FUNCTION fun_split(strValue VARCHAR(500),strSplit CHAR(1),iPostion TINYINT) RETURNS VARCHAR(20) DETERMINISTIC BEGIN DECLARE strValue_New VARCHAR(500) DEFAULT ''; DECLARE strValue_Old VARCHAR(500) DEFAULT ''; DECLARE strReturn VARCHAR(20) DEFAULT ''; DECLARE iLength_Old TINYINT DEFAULT 0; DECLARE iLength_New TINYINT DEFAULT 0; DECLARE iLength TINYINT DEFAULT 0; SET strValue_New=SUBSTRING_INDEX(strValue,strSplit,iPostion); IF iPostion-1<>0 THEN SET strValue_Old=SUBSTRING_INDEX(strValue,strSplit,iPostion-1); SET iLength_Old=LENGTH(strValue_Old); ELSE SET iLength_Old=-1; END IF; SET iLength_New=LENGTH(strValue_New); SET iLength=iLength_New-iLength_Old; SET strReturn=SUBSTRING(strValue_new,iLength_Old+2,iLength); RETURN strReturn; END $$ DELIMITER ;
3>.用于生成测试数据的存储过程代码
USE mysqlops; DELIMITER $$ DROP PROCEDURE IF EXISTS `usp_mysqlops_set_enum` $$ CREATE PROCEDURE usp_mysqlops_set_enum(strenum_job VARCHAR(500),strset_city VARCHAR(500),idata_total INT) BEGIN DECLARE isplit_num TINYINT DEFAULT 0; DECLARE idata_num INT DEFAULT 0; DECLARE iwhile_num INT DEFAULT 0; DECLARE icommit SMALLINT DEFAULT 0; DECLARE irnd_f TINYINT DEFAULT 0; DECLARE irnd_s TINYINT DEFAULT 0; DECLARE strenum_job_sub VARCHAR(20) DEFAULT ''; SET isplit_num=LENGTH(strenum_job)-LENGTH(REPLACE(strenum_job,',','')); SET idata_num=FLOOR(idata_total/isplit_num); WHILE isplit_num<>0 DO SET strenum_job_sub=fun_split(strenum_job,',',isplit_num); WHILE iwhile_num4>.生成测试数据
传入三个收入参数:枚举类型ENUM字段的值、集合类型SET字段的值、目标生成测试数据的总条数2000W,命令如下:
USE mysqlops; CALL usp_mysqlops_set_enum('DBA,SA,C++,JavaScript,NA,QA,Java,PHP,other,,Python','shanghai,beijing,hangzhou,shenzhen,guangzhou,xiamen,tianjin,qingdao,dalian,xian,other',20000000);(三) 总结
本文主要是为接下来的二篇主题分别为:MySQL数据库之集合数据类型SET的DDL变更测试、MySQL数据库之枚举数据类型ENUM的DDL变更测试,而准备测试环境的文章信息,且这二篇文章都是用共同的测试表数据,也为方便读者们的理解与后续篇章的阅读,特意单独作为一篇文章,本文的主要内容是MySQL函数与MySQL存储过程,可以借鉴到的信息:
a) 提供一个较通用性的字符串分拆函数,也即指定分隔符号,再传入字符串和分拆字符的顺序号,即返回想获得的字符串数据;
b) MySQL函数的正确编写技巧;
c) MySQL存储过程的编写技巧;
d) MySQL提供的语句段控制循环操作的WHILE用法;
e) MySQL函数与MySQL存储过程内,都有各种字符串函数的调用,也请读者学习其用法;
f) MySQL存储过程中采用了多条语句写入,批量提交的事务技巧,以加速InnoDB存储引擎INSERT事务的处理速度;
数据类型系列讲解文章列表:
MySQL数据库数据类型之ENUM、SET、BOOL/BOOLEAN、TINYINT
MySQL数据库之数据类型BOOL/BOOLEAN与TINYINT测试总结
原创文章,转载请注明: 文章地址MySQL数据库之数据类型集合类型和枚举类型测试环境
建议继续学习:
- MySQL数据库之布尔类型、枚举类型和集合类型的应用场景详解 (阅读:5582)
- MySQL数据库数据类型之枚举类型ENUM测试总结 (阅读:3991)
- MySQL数据库之枚举数据类型ENUM的DDL变更测试 (阅读:3762)
- Java程序员们最常犯的3个集合错误 (阅读:3050)
- 用 JS 枚举质数 (阅读:1994)
- MySQL数据库数据类型之集合类型SET测试总结 (阅读:1462)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:MySQLOPS 数据库与运维自动化技术分享 来源: MySQLOPS 数据库与运维自动化技术分享
- 标签: 枚举 集合
- 发布时间:2012-03-18 23:33:48
- [70] IOS安全–浅谈关于IOS加固的几种方法
- [69] Twitter/微博客的学习摘要
- [64] 如何拿下简短的域名
- [63] Go Reflect 性能
- [63] android 开发入门
- [61] find命令的一点注意事项
- [59] 流程管理与用户研究
- [58] Oracle MTS模式下 进程地址与会话信
- [58] 读书笔记-壹百度:百度十年千倍的29条法则
- [58] 图书馆的世界纪录