MySQL数据库自动生成大批量数据

在mysql学习和练习中,特别是学习索引及性能调优时,需要生成一张或几张大表来进行测试,能给初学者更直观的学习和更深刻的印象

一、生成脚本
以下使用存储过程批量生成包含用户名,手机号,出生日期等字段大表。
该存储过程使用基于uid作为主键,因此会生成少量重复手机号码,后面有滤重SQL脚本。
如果想一次性生成不重复手机号码,可以考虑修改以下脚本,去掉uid,基于mobile列作为主键

DROP TABLE IF EXISTS big_table;
DROP PROCEDURE IF EXISTS prc_gen_user;

CREATE TABLE `big_table` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `mobile` char(11) DEFAULT NULL,
  `passwd` varchar(50) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `sex` tinyint DEFAULT NULL,
  `birthday` datetime DEFAULT NULL,
  `updated_time` datetime DEFAULT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE PROCEDURE prc_gen_user(l_cnt int)
BEGIN
   DECLARE x INT DEFAULT 0;
   DECLARE p char(11);

   WHILE x < l_cnt
   DO
      SET x = x + 1;
      SET p =
             concat('1',
                    substring(cast(3 + (rand() * 10) % 7 AS char(50)), 1, 1),
                    right(left(trim(cast(rand() AS char(50))), 11), 9));

      INSERT INTO big_table(mobile,
                            passwd,
                            name,
                            sex,
                            birthday,
                            updated_time)
         VALUES (
                   p,
                   md5(ceiling(rand() * 1000000)),
                   concat(
                      substring(
                         '赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮齐康伍余元卜顾孟平黄和穆萧尹姚邵堪汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董粱杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚',
                         floor(1 + 190 * rand()),
                         1),
                      substring(
                         '明国华建文平志伟东海强晓生光林小民永杰军金健一忠洪江福祥中正振勇耀春大宁亮宇兴宝少剑云学仁涛瑞飞鹏安亚泽世汉达卫利胜敏群波成荣新峰刚家龙德庆斌辉良玉俊立浩天宏子松克清长嘉红山贤阳乐锋智青跃元武广思雄锦威启昌铭维义宗英凯鸿森超坚旭政传康继翔栋仲权奇礼楠炜友年震鑫雷兵万星骏伦绍麟雨行才希彦兆贵源有景升惠臣慧开章润高佳虎根远力进泉茂毅富博霖顺信凡豪树和恩向道川彬柏磊敬书鸣芳培全炳基冠晖京欣廷哲保秋君劲轩帆若连勋祖锡吉崇钧田石奕发洲彪钢运伯满庭申湘皓承梓雪孟其潮冰怀鲁裕翰征谦航士尧标洁城寿枫革纯风化逸腾岳银鹤琳显焕来心凤睿勤延凌昊西羽百捷定琦圣佩麒虹如靖日咏会久昕黎桂玮燕可越彤雁孝宪萌颖艺夏桐月瑜沛诚夫声冬奎扬双坤镇楚水铁喜之迪泰方同滨邦先聪朝善非恒晋汝丹为晨乃秀岩辰洋然厚灿卓杨钰兰怡灵淇美琪亦晶舒菁真涵爽雅爱依静棋宜男蔚芝菲露娜珊雯淑曼萍珠诗璇琴素梅玲蕾艳紫珍丽仪梦倩伊茜妍碧芬儿岚婷菊妮媛莲娟一',
                         floor(1 + 400 * rand()),
                         1),
                      substring(
                         '明国华建文平志伟东海强晓生光林小民永杰军金健一忠洪江福祥中正振勇耀春大宁亮宇兴宝少剑云学仁涛瑞飞鹏安亚泽世汉达卫利胜敏群波成荣新峰刚家龙德庆斌辉良玉俊立浩天宏子松克清长嘉红山贤阳乐锋智青跃元武广思雄锦威启昌铭维义宗英凯鸿森超坚旭政传康继翔栋仲权奇礼楠炜友年震鑫雷兵万星骏伦绍麟雨行才希彦兆贵源有景升惠臣慧开章润高佳虎根远力进泉茂毅富博霖顺信凡豪树和恩向道川彬柏磊敬书鸣芳培全炳基冠晖京欣廷哲保秋君劲轩帆若连勋祖锡吉崇钧田石奕发洲彪钢运伯满庭申湘皓承梓雪孟其潮冰怀鲁裕翰征谦航士尧标洁城寿枫革纯风化逸腾岳银鹤琳显焕来心凤睿勤延凌昊西羽百捷定琦圣佩麒虹如靖日咏会久昕黎桂玮燕可越彤雁孝宪萌颖艺夏桐月瑜沛诚夫声冬奎扬双坤镇楚水铁喜之迪泰方同滨邦先聪朝善非恒晋汝丹为晨乃秀岩辰洋然厚灿卓杨钰兰怡灵淇美琪亦晶舒菁真涵爽雅爱依静棋宜男蔚芝菲露娜珊雯淑曼萍珠诗璇琴素梅玲蕾艳紫珍丽仪梦倩伊茜妍碧芬儿岚婷菊妮媛莲娟一',
                         floor(1 + 400 * rand()),
                         1)),
                   ceiling(rand() * 10) % 2,
                   date(
                        now()
                      - INTERVAL (20 + ceiling(rand() * 100) % 40) YEAR),
                   concat('2018-',
                          1 + ceiling(rand() * 100) % 12,
                          '-',
                          1 + ceiling(rand() * 100) % 28))
      ON DUPLICATE KEY UPDATE updated_time = now();
   END WHILE;
END

二、数据填充,这里插入500万条记录
call prc_gen_user(5000000);

三、滤重SQL语句

DELETE FROM big_table
WHERE mobile IN (SELECT mobile
                     FROM (SELECT u1.mobile
                           FROM big_table u1
                           GROUP BY u1.mobile
                           HAVING count(*) > 1) a)
      AND uid NOT IN (SELECT uid
                      FROM (SELECT min(u2.uid) AS uid
                            FROM big_table u2
                            GROUP BY u2.mobile
                            HAVING count(*) > 1) b);

四、新建和删除索引
alter table big_table add index index_mo_name(mobile,name);
drop index index_mo_name on big_table;

文章引用下面的链接并在此基础上做了少量修改:
https://blog.csdn.net/leshami/article/details/84348477

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Django中,我们可以使用ORM(对象关系映射)框架来创建数据库。ORM框架将Python类映射到数据库中,并提供了对数据库的操作。 要使用ORM框架创建数据库,我们需要执行以下步骤: 1. 在Django项目中的models.py文件中定义我们的数据模型类,如下所示: ```python from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) publication_date = models.DateField() ``` 在上面的代码中,我们定义了一个Book类,它继承了models.Model类,并定义了三个属性:title、author和publication_date。这些属性将映射到数据库的列。 2. 接下来,我们需要在Django项目的settings.py文件中配置数据库连接信息。我们需要指定数据库类型、主机名、端口号、数据库名称、用户名和密码。例如: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '3306', } } ``` 在上面的代码中,我们指定了MySQL数据库的连接信息。如果您使用的是其他数据库,您需要相应地更改这些信息。 3. 接下来,我们需要创建迁移文件。迁移文件是用于将数据模型类映射到数据库的文件。我们可以使用以下命令创建迁移文件: ```python python manage.py makemigrations ``` 4. 最后,我们需要执行迁移,将模型类映射到数据库中。我们可以使用以下命令执行迁移: ```python python manage.py migrate ``` 执行完上述命令后,Django将自动在MySQL数据库中创建名为“myapp_book”的,该包含三个列:title、author和publication_date。 总之,使用Django ORM框架可以方便地在MySQL数据库中创建数据。只需要定义模型类,配置数据库连接信息,创建迁移文件,执行迁移即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值