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 ...
随机推荐
- 复选框checkbox——用背景图片替换样式
input { border : none; display : inline-block; width : 25px; height : 25px; -webkit-apearance : none ...
- 【转】TEA、XTEA、XXTEA加密解密算法(C语言实现)
ref : https://blog.csdn.net/gsls200808/article/details/48243019 在密码学中,微型加密算法(Tiny Encryption Algorit ...
- day21双下方法,源码相关,异常处理
#!/usr/bin/env python# -*- coding:utf-8 -*- # 1.列举你了解的面向对象中的特殊成员,并为每个写代码示例.'''__init__初始化:class A: d ...
- 暑假第二弹:基于docker的hadoop分布式集群系统的搭建和测试
早在四月份的时候,就已经开了这篇文章.当时是参加数据挖掘的比赛,在计科院大佬的建议下用TensorFlow搞深度学习,而且要在自己的hadoop分布式集群系统下搞. 当时可把我们牛逼坏了,在没有基础的 ...
- npm knowledge basics
npm inro https://www.npmjs.com/ npm is the package manager for javascript npm 为 nodejs默认的包管理工具, 为nod ...
- Modbus通讯两种传输方式
控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信.用户选择想要的模式,包括串口通信参数(波特率.校验方式等),在配置每个控制器的时候,在一个Modbus网络上的 ...
- PMP知识点(一)——风险登记册
一.Reference: [管理心得之四十八]<风险登记册>本身的风险 问题日志与风险登记册的区别与联系 PMBOK重要概念梳理之二十六 风险登记册 风险登记单-MBAlib 二.Atta ...
- D. Vanya and Treasure Codeforces Round #355 (Div. 2)
http://codeforces.com/contest/677/problem/D 建颗新树,节点元素包含r.c.dis,第i层包含拥有编号为i的钥匙的所有节点.用i-1层更新i层,逐层更新到底层 ...
- Repeater取不到服务端控件
<td> <asp:Button ID="Button1" runat="server" Text="查看" O ...
- neo4j语法
图数据库在社交网络.实时推荐.征信系统.人工智能等领域有广泛应用. 集群特征:主从复制,重选主服务器和容错:每个实例都有自己的本地缓冲 性能优势:查询内不跨网络:实时操作,具有快速和一致的响应时间:缓 ...