IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

MySQL数据库之数据类型集合类型和枚举类型测试环境

MySQLOPS 数据库与运维自动化技术分享 2012-03-18 23:33:48 累计浏览 2,978 次
本机暂存

导读

针对四种数据类型:布尔类型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_num
    4>.生成测试数据
    传入三个收入参数:枚举类型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数据库数据类型之枚举类型ENUM测试总结
    MySQL数据库数据类型之集合类型SET测试总结

    原创文章,转载请注明: 文章地址MySQL数据库之数据类型集合类型和枚举类型测试环境

同分类推荐文章

  1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,250)
  2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,397)
  3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  4. Mysql监控指南 (累计阅读 21,351)
  5. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
  6. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,056)
  7. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  8. 浅谈MySQL索引背后的数据结构及算法 (累计阅读 11,904)
  9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,708)
  10. 深入浅出INNODB MVCC机制与原理 (累计阅读 9,693)