MySQL循环插入100w条数据

CREATE DATABASE `数据库名称`

删库-删表sql语句-需要删除的时候使用该语句

-- 删除库
DROP DATABASE `数据库名称`

-- 删除表
DROP TABLE `表名称`

-- 删除函数
DROP FUNCTION 函数名称

-- 删除视图
DROP VIEW 视图名称

-- 删除存储过程
DROP PROCEDURE 存储过程名称

简单创建一张表

-- 创建数据库
CREATE DATABASE `demo`

-- 切换到指定的数据库
USE demo

-- 创建一张 users 表
CREATE TABLE `users`(
  -- 创建字段id 超大int类型(long)设置自增,不允许为空
  `id` BIGINT(64) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(32) DEFAULT  COMMENT 用户昵称,
  `pwd` VARCHAR(64) DEFAULT  COMMENT 用户密码,
  PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT=用户表;

编写循环体

-- 标志,写函数前一定要写,很重要
DELIMITER $$

-- 创建一个function函数叫 mock_data()
CREATE FUNCTION mock_data()
RETURNS INT
BEGIN
  DECLARE num INT DEFAULT 1000000;
  DECLARE i INT DEFAULT 0;
  WHILE i<num DO
   -- 循环体
   INSERT INTO `users`(`name`,`pwd`)VALUES(CONCAT(用户,i),CONCAT(RAND()*(RAND(999999999-100000000)+1000000000)));
   -- i每次+1操作
   SET i = i+1;  
  END WHILE; 
  RETURN i;
  
-- 结束需要和标志定义的一样,这个很重要
END $$
SELECT mock_data();

细节注意:

如果使用的是 navicat 11版本的工具是没有 delimiter 关键字的,当然navicat其他版本我就不清楚了。需要用SQLyog工具,当前我用到SQLyog版本为8.32,SQLyog就可以。并且MySQL的版本是5.7.35,其他版本慎用

MySQL版本

SQLyog

Navicat

问题注意:如果出现 FUNCTION mock_data already exists 错误

解决方法1:

-- 使用sql语句执行删除函数操作
DROP FUNCTION mock_data;

解决方法2:

使用 SQLyog 工具 Functions文件,选择你需要删除的函数

使用 Navicat 工具 找到函数,选择你需要删除的函数即可

最后看一下结果

索引创建

-- id_表名_字段名
-- CREATE FULLTEXT INDEX 索引名 ON 表(字段) == 创建全文索引1
-- ALTER TABLE 表 ADD FULLTEXT INDEX 索引名(字段) == 创建全文索引2
-- CREATE INDEX 索引名 ON 表(字段) == 在某个字段上创建索引
CREATE INDEX users_name ON users(`name`)
CREATE FULLTEXT INDEX users_all ON users(`name`,`pwd`)
ALTER TABLE users ADD FULLTEXT INDEX fulltext_users(`name`,`pwd`)
经验分享 程序员 微信小程序 职场和发展