mysql 创建存储过程 创建1000w测试数据表
存储过程:The stored procedure
结构
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE stored_procedure_name ([proc_parameter[,...]])
[characteristic ...] routine_body
proc_parameter(参数列表):
[ IN(输入参数) | OUT(输出参数) | INOUT(即可输入也可输出) ] param_name(参数名称) type(参数类型) characteristic(指定存储过程特性):
COMMENT 'string'(注释信息)
| LANGUAGE SQL(说明body部分由SQL语句组成,LANGUAGE可选值只有SQL)
| [NOT] DETERMINISTIC(指明存储过程执行结果是否确定 默认值:NOT DETERMINISTIC)
| { CONTAINS SQL(默认 说明子程序包含SQL语句,但是不包含写数据语句) | NO SQL(说明子程序不包含SQL语句) | READS SQL DATA(说明子程序包含读数据读数据语句) | MODIFIES SQL DATA(说明子程序包含写数据语句) }(指定子程序使用存储过程的限制)
| SQL SECURITY { DEFINER(默认 只有定义者才能执行) | INVOKER(拥有权限的调用者才可以执行) }(指明谁有权限执行)
routine_body(SQL代码内容,可以使用BEGIN...END表示SQL代码的开始和结束):
Valid SQL routine statement [begin_label:] BEGIN
[statement_list]
……
END [end_label]
例子
#无参数
create procedure myFist_proc() ## 创建存储过程
begin
//....
end; show create procedure myFist_proc();
call myFist_proc(); #带有输出参数的存储过程
create procedure mySecond_proc(out sumStudent int )
begin
select count(*) into sumStudent from score where grade>80;
end; call mySecond_proc(@sumStudent);
select @sumStudent; ##带有输入参数的存储过程 create procedure myThird_proc(in minScore int ,out sumStudent int)# 创建存储过程
begin
select count(*) into new_table_name from old_table_name where grade>minScore;#从一个旧表中选取数据,然后把数据插入另一个新表中
end; call myThird_proc(90); #大于90的
select @sumStudent;
创建1000万数据的测试表(电脑问题非常慢)
#创建表
CREATE TABLE `big_data_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(16) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`email` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `name_age` (`email`,`age`) USING BTREE,
KEY `email` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; #创建存储过程,开始插入数据
CREATE PROCEDURE `insert_data_p`(IN num INT)
BEGIN
DECLARE n INT DEFAULT 1;#申明变量n
WHILE n <= num DO #当n小于传入的参数时执行循环插入
INSERT INTO big_data_test(name,age,email)values(concat('alex',n),rand()*50,concat('alex',n,'@qq.com'));
set n=n+1;
end while;
ENd; #调用存储过程,插入1000万条数据(总耗时:382.614 sec)
CALL insert_data_p(10000000);
这个超快 MySQL快速生成100W条测试数据转载连接
CREATE TABLE `vote_record` (
`id` INT (11) NOT NULL AUTO_INCREMENT,
`user_id` VARCHAR (20) NOT NULL,
`vote_id` INT (11) NOT NULL,
`group_id` INT (11) NOT NULL,
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `index_user_id` (`user_id`) USING HASH
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8; #内存表
CREATE TABLE `vote_record_memory` (
`id` INT (11) NOT NULL AUTO_INCREMENT,
`user_id` VARCHAR (20) NOT NULL,
`vote_id` INT (11) NOT NULL,
`group_id` INT (11) NOT NULL,
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `index_id` (`user_id`) USING HASH
) ENGINE = MEMORY AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8; #创建函数及存储过程
CREATE FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET latin1
BEGIN
DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
DECLARE return_str varchar(255) DEFAULT '' ;
DECLARE i INT DEFAULT 0;
WHILE i < n DO
SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));
SET i = i +1;
END WHILE;
RETURN return_str;
END; CREATE PROCEDURE `add_vote_memory`(IN n int)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE (i <= n ) DO
INSERT into vote_record_memory (user_id,vote_id,group_id,create_time ) VALUEs (rand_string(20),FLOOR(RAND() * 1000),FLOOR(RAND() * 100) ,now() );
set i=i+1;
END WHILE;
END; #插入内存表
CALL add_vote_memory(1000000) #插入普通表中
INSERT into vote_record SELECT * from vote_record_memory #php.ini改下内存
tmp_table_size=1G
max_heap_table_size = 1G 或者动态设置
SET GLOBAL tmp_table_size=2147483648; (无效果?)
SET GLOBAL max_heap_table_size=2147483648;(无效果?)
或者:
set session tmp_table_size=1024*1024*1024; (查看:show variables like '%tmp_table%';)
set session max_heap_table_size=1024*1024*1024; (查看:show variables like '%max_heap%';)
tmp_table_size 控制内存临时表的最大值,超过限值后就往硬盘写,写的位置由变量 tmpdir 决定
max_heap_table_size 用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值。
查看:show variables like '%tmp%';
max_tmp_tables=32 #客户端可以同时保持打开的最大临时表数
ERROR 1114 (HY000): The table 'vote_record_memory' is full 就是因为上面的值设置的太小
mysql 创建存储过程 创建1000w测试数据表的更多相关文章
- mysql创建存储过程,批量建表分表00到99
这里以sqlyong为软件示例: --创建存储过程DELIMITER $$ CREATE PROCEDURE `createTablesWithIndex`() BEGIN DECLARE `@i` ...
- 用MYSQL的存储过程创建百万级测试数据表
创建随机字符串函数,便于创建名称 DROP function if EXISTS rand_string; #创建一个指定字符个数的函数 create function rand_string(n I ...
- Mysql使用存储过程创建测试数据
一.概述 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集.其存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出 ...
- 用NaviCat创建存储过程批量添加测试数据
打开navicat连接上数据库,然后打开左上角函数,新建一个函数. BEGIN DECLARE i int; --声明变量 DECLARE groupid int; set i=LAST_INSERT ...
- MySql使用存储过程清除数据库所有表数据,保存数据结构
BEGIN DECLARE strClear VARCHAR(256); DECLARE done INT DEFAULT 0; #定义游标 DECLARE curOne CURSOR FOR sel ...
- mysql写存储过程并定时调用
设置一个定时任务:运行以下SQL -- 创建一个表test:字段endtime CREATE TABLE test (endtime DATETIME); -- 创建函数 :向test插入endt ...
- mysql -- 创建存储过程 往数据表中新增字段
需求: 往某数据库的某个表中新增一个字段(若该字段已存在,则不做操作:若该字段不存在,则新增) 百度了n久,没有符合要求的例子,只有参考加自己琢磨,最终终于给弄出来了,以下是几个版本的更迭 第一版: ...
- mysql命令行创建存储过程命令行定时执行sql语句
mysql -uroot -p show databases; use scm; show tables; show procedure status; 其他命令: SHOW VARIABLES LI ...
- 创建MySQL用户 赋予某指定库表的权限 flush privileges才能生效!!!!;@'localhost'授权本地,@'%'授权远程
update ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value 建议使用GRANT语句进行授权,语句如下: gra ...
随机推荐
- Druid.jar包
首先了解一下,什么是Druid. Druid是Java语言中最好的数据库连接池,它能够提供强大的监控和扩展功能. Druid是一个JDBC组件,它包括三部分: 1)DruidDriver 代理Driv ...
- 2017-12-20python全栈9期第五天第一节之昨日内容回顾和作业讲解之字母变大写
#!/user/bin/python# -*- coding:utf-8 -*-lis = [2,3,'k',['qwe',20,['k1',['tt','3','1']],89],'ab','adv ...
- file 自定义上传附件并展示缩略图
效果图镇楼.. 写的有点乱.上传一个实例供大家参考--附件下载地址如何下: https://files.cnblogs.com/files/fchx91/uploadFiles.rar 2019- ...
- CSS部分语法2
<!-- 第1部分 尺寸与框模型 略 第2部分背景设置 2.1 背景颜色:background-color:value 2.2 背景图片:background-image body{ backg ...
- C# 01 Primitive Types and Expressions
Class Data or Attributes state of the application Methods or Functions have behavior Namespace is a ...
- Livereload or meta
静态页面布局的过程中,如果可以一边写一边看见结果,那肯定是很方便的,在最开始使用的DW中实现了这一目标,但并不是浏览器环境下.之后使用gulp中的livereload后配合chrome插件livere ...
- SpringMVC+Apache Shiro+JPA(hibernate)案例教学(三)给Shiro登录验证加上验证码
序: 给Shiro加入验证码,有多种方式,当然你也可以通过继承修改FormAuthenticationFilter类,通过Shiro去验证验证码.具体实现请百度: 应用Shiro到Web Applic ...
- 【转】Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- 通过scrollTop,使子元素滚动至指定位置
想实现这样的一个功能,点击子元素,让元素滚动至指定位置,怎么实现呢? 在代码实现之前,先了解下相关关键点. 1.scrollHeight 属性 通过 scrollHeight 属性可获得子元素的滚动高 ...
- 【linux终端操作】
1. ctr + alt + t 打开新的终端窗口2. ctr + shift + + 终端窗口字体放大3. ctr + - 终端窗口字体缩小4. ls : 查看目录下的文件信息5. pwd: 查看目 ...