码迷,mamicode.com
首页 > 数据库 > 详细

mysql插入数据出现error1114 table is full

时间:2020-11-01 09:47:09      阅读:25      评论:0      收藏:0      [点我收藏+]

标签:bst   tab   查询   proc   tin   null   生效   abc   rand   

今天尝试使用索引来提升查找效率,因此使用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服务

mysql插入数据出现error1114 table is full

标签:bst   tab   查询   proc   tin   null   生效   abc   rand   

原文地址:https://www.cnblogs.com/liweifua/p/13905337.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!