1000w条mysql数据测试

使用load指令进行插入操作

  • 登录mysql时加上--local_infile
    否则在导入时会报:
    ERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.
    在这里插入图片描述
    在这里插入图片描述
  • 检查是否开启local_infile
    如果没有开启会报:
    ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
    使用该指令查看(默认是0,关闭状态):
    select @@local_infile;
    在这里插入图片描述
    使用该指令进行设置
    set global local_infile = 1; #要加global,因为他是全局变量,不加要报错
    在这里插入图片描述
    在导入数据前,先选好库,建好对应的表
  • 导入数据:
    load data local infile ‘路径名’ into table `表名` fields terminated by ‘,’ lines terminated by ‘\n’;
    这个’,'是可以变化的,但是要和表中字段值之间的分隔符一致才行。
    在这里插入图片描述
    例如:我的表名是tb_sku,tb_sku1.sql数据上传放置在linux服务器的/root/sql/目录下
load data local infile '/root/sql/tb_sku1.sql' into table `tb_sku` fields terminated by ',' lines terminated by '\n';

在这里插入图片描述
总结:

  • 登录时加上 --local_infile
  • 开启 local_infile
  • 创建好对应的库和表
  • 将要导入的sql表,找好存放位置,导入数据

1000w条数据源

表结构,库自己任选

CREATE TABLE `tb_sku` (
  	`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品id',
  	`sn` varchar(100) NOT NULL COMMENT '商品条码',
  	`name` varchar(200) NOT NULL COMMENT 'SKU名称',
  	`price` int(20) NOT NULL COMMENT '价格(分)',
  	`num` int(10) NOT NULL COMMENT '库存数量',
  	`alert_num` int(11) DEFAULT NULL COMMENT '库存预警数量',
  	`image` varchar(200) DEFAULT NULL COMMENT '商品图片',
  	`images` varchar(2000) DEFAULT NULL COMMENT '商品图片列表',
  	`weight` int(11) DEFAULT NULL COMMENT '重量(克)',
  	`create_time` datetime DEFAULT NULL COMMENT '创建时间',
  	`update_time` datetime DEFAULT NULL COMMENT '更新时间',
  	`category_name` varchar(200) DEFAULT NULL COMMENT '类目名称',
  	`brand_name` varchar(100) DEFAULT NULL COMMENT '品牌名称',
  	`spec` varchar(200) DEFAULT NULL COMMENT '规格',
  	`sale_num` int(11) DEFAULT '0' COMMENT '销量',
  	`comment_num` int(11) DEFAULT '0' COMMENT '评论数',
  	`status` char(1) DEFAULT '1' COMMENT '商品状态 1-正常,2-下架,3-删除',
  	PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';

数据量太大了,粘不上,电脑都快嘎啦,只能上链接了

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这是一个比较具体的问题,我们可以分步骤来实现。 首先,需要连接到 MySQL 数据库,可以使用 Go 语言自带的 `database/sql` 包。示例代码如下: ```go import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { // 连接数据库 db, err := sql.Open("mysql", "user:password@tcp(host:port)/database") if err != nil { panic(err) } defer db.Close() // 测试连接 err = db.Ping() if err != nil { panic(err) } fmt.Println("Connected to MySQL database!") } ``` 接下来,我们需要创建一个存储过程,用于批量插入数据。示例代码如下: ```go func createInsertProcedure(db *sql.DB) error { stmt := ` CREATE PROCEDURE insert_data(IN start INT, IN end INT) BEGIN DECLARE i INT DEFAULT start; WHILE i <= end DO INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); SET i = i + 1; END WHILE; END; ` _, err := db.Exec(stmt) if err != nil { return err } return nil } ``` 在这个存储过程中,我们使用了 `DECLARE` 关键字声明了一个变量 `i`,并使用 `WHILE` 循环语句来批量插入数据。 最后,我们可以调用存储过程来执行批量插入操作。示例代码如下: ```go func insertData(db *sql.DB) error { // 数据总数 total := 30000 // 每次插入的数据数 batch := 1000 // 执行批量插入操作 for i := 0; i < total; i += batch { start := i end := i + batch - 1 if end > total { end = total } _, err := db.Exec("CALL insert_data(?, ?)", start, end) if err != nil { return err } } return nil } ``` 在这个函数中,我们使用了 `CALL` 关键字来调用存储过程,并传递了起始位置和结束位置作为参数。 以上就是实现 MySQL 存储过程,按 1000 一次插入 3W 数据的 Go 示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值