mysql插入数据出现error1114 table is full

今天尝试使用索引来提升查找效率,因此使用mysql进行实验,然后创建了一个表,往里面随机插入100万条数据。使用的是linux环境下的mysql,数据库连接软件是navicat。

使用里面包含tableid,userid等,这是创建表的语句。

CREATE TABLE `user` (  

    `tableid` INT (11) NOT NULL AUTO_INCREMENT,  

    `userid` VARCHAR (20) NOT NULL,  

    `type` TINYINT (16) NOT NULL,  

    `time` datetime NOT NULL,  

    PRIMARY KEY (`tableid`)

) ENGINE = MEMORY AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8

然后构建一个随机函数,这里的userid使用的是随机函数

delimiter $$
create function rand_string(n int) returns varchar(255)
begin
declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ';
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()*52),1));
set i=i+1;
end while;
return return_str;
end 
$$

然后使用过程进行创建

delimiter $$
CREATE  PROCEDURE `add_vote_memory`(IN n int)  

select count(*) from vote_record_memory
BEGIN    

  DECLARE i INT DEFAULT 1;  

    WHILE (i <= n ) DO  

      INSERT into vote_record_memory  (userid,type,time ) VALUEs (rand_string(20),FLOOR(RAND() * 10),now() );  

            set i=i+1;  

    END WHILE;  

END  
$$

 

之后再调用这个过程

call add_vote_memory(1000000)

然后就执行操作,但是还没有执行完就发现出现了报错

查看数据库,发现竟然网上竟然说的是这样做是压力测试的时候报错。原因有二:1

1 得知是由于内存表的大小超过了规定的范围。经过查看二者值默认均是16M,

2.需要设置tmp_table_size 大于等于max_heap_table_size

首先查看内存表得大小:

在mysql里面查询

show  VARIABLES like '%%table_size%'

得到上述的结果打开/etc/mysql目录下的my.cnf并在后面添加

tmp_table_size = 256M
max_heap_table_size = 256M

需要写入my.cnf配置文件重启mysql然后生效。

使用

service mysql restart

进行重启mysql服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值