sqlyog和navicat哪个好

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlyog和navicat哪个好相关的知识,希望对你有一定的参考价值。

SQLyog 是一个易于使用的、快速而简洁的图形化管理mysql数据库的工具,它能够在任何地点有效地管理你的数据库,而且它本身是完全免费的!!
功能:
1、快速备份和恢复数据;
2、以GRID / TEXT 格式显示结果;
3、支持客户端挑选、过滤数据;
4、批量执行很大的SQL脚本文件;
5、快速执行多重查询并能够返回每页超过1000条的记录集,而这种操作是直接生成在内存中的;
6、程序本身非常短小精悍!压缩后只有348 KB ;
7、完全使用MySQL C APIs程序接口;
8、以直观的表格界面建立或编辑数据表;
9、以直观的表格界面编辑数据;
10、进行索引管理;
11、创建或删除数据库;
12、操纵数据库的各种权限:库、表、字段;
13、编辑BLOB类型的字段,支持Bitmap/GIF/JPEG格式;
14、输出数据表结构/数据为SQL脚本;
15、支持输入/输出数据为CSV文件;
16、可以输出数据库清单为html文件;
17、为所有操作建立日志;
18、个人收藏管理操作语句;
19、支持语法加亮显示;
20、可以保存记录集为CSV、HTML、XML 格式的文件;
21、99% 的操作都可以通过快捷键完成;
22、支持对数据表的各种高级属性修改;
23、查看数据服务器的各种状态、参数等;
24、支持更改数据表类型为ISAM, MYISAM, MERGE, HEAP, InnoDB, BDB
25、刷新数据服务器、日志、权限、表格等;
26、诊断数据表:检查、压缩、修补、分析;
参考技术A 为什么没有用datagrip的?

使用MySQL可视化客户端,例如SQLyog,Navicat等,只编写SQL语句,使用2的N次方原理,快速初始化百万千万条数据

目录

1.思路

2.创建表

3.具体操作

4.其他快速插入百万条数据的方法

4.1Java代码批量插入

4.2存储过程批量插入


1.思路

使用MySQL可视化客户端,例如SQLyog,Navicat for MySQL等,只编写SQL语句,使用2的N次方原理,快速初始化百万千万条数据。

点17下,2的N次方就是13万多条数据。

 

2.创建表

临时中间表

CREATE TABLE `insertdemo` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `idvalue` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

百万数据表

CREATE TABLE `insert100` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `field1` varchar(25) DEFAULT NULL,
  `field2` varchar(25) DEFAULT NULL,
  `field3` varchar(25) DEFAULT NULL,
  `field4` varchar(25) DEFAULT NULL,
  `field5` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;



3.具体操作

第一步:初始化10万条种子数据,运行17下,2的N次方就是13万多条数据。

INSERT INTO `insertdemo`(`idvalue`) SELECT `idvalue` FROM insertdemo;

第二步:快速插入100万条数据,快速执行10次。

INSERT INTO `insert100`(`field1` ,`field2`,`field3`,`field4`,`field5`)
SELECT 'field1','field2','field3','field4','field5' FROM `insertdemo`;

4.其他快速插入百万条数据的方法


4.1Java代码批量插入

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;

public class SQLGenApplication {
    public static void main(String[] args) throws IOException {
        
        StringBuilder insertBuf = new StringBuilder("INSERT INTO `table1` (`id`, `uid`, `a`, `b`) VALUES");
        String values = "('%s', '%s',  '%s.00', '%s.00'),";
        BufferedReader fis = new BufferedReader(new FileReader("fileParam.txt"));
        String line = null;
        Random r = new Random();
        
        int cnt = 0;
        int batch = 0;
        int perCnt = 2500;
        while((line = fis.readLine()) != null) {
            
            long id = Long.parseLong(line.substring(8));

            int i = r.nextInt(100);
            while(i <= 0 ) {
                i = r.nextInt(100);
            }
            int i2 = r.nextInt(100);
            while(i2 < i ) {
                i2 = r.nextInt(100);
            }
            insertBuf.append(String.format(values, id, line, i, i2));
            if(cnt < perCnt) {
                cnt++;

            } else {

                insertBuf.deleteCharAt(insertBuf.length()-1);
                insertBuf.append(";");
                FileWriter fw = new FileWriter("fileSQL" + batch + ".sql");
                fw.write(insertBuf.toString());
                fw.flush();
                fw.close();
                cnt = 0;
                batch++;
                
                insertBuf =  new StringBuilder("INSERT INTO `table1` (`id`, `uid`, `a`, `b`) VALUES");
            }
        }
        if(cnt != 0 && cnt < perCnt) {

            insertBuf.deleteCharAt(insertBuf.length()-1);
            insertBuf.append(";");
            FileWriter fw = new FileWriter("fileSQL" + batch + ".sql");
            fw.write(insertBuf.toString());
            fw.flush();
            fw.close();
            cnt = 0;
            
        }
        
    
        fis.close();
    }
}


4.2存储过程批量插入

use `数据库名称`;
DELIMITER $$ 
drop procedure if exists data_100w_gen$$
create procedure data_100w_gen(IN startIdx int, IN endIdx int, IN prefix varchar(1000), IN surfix varchar(1000), out ex_sql_out longtext) 
begin
    declare ex_sql longtext default prefix;
    -- 超时设置
    set global delayed_insert_timeout=20000;
    set global connect_timeout = 20000;
    set global net_read_timeout = 20000;
    set global net_write_timeout = 20000;
    while startIdx<=endIdx-1 DO
        set ex_sql = concat(ex_sql, "(", CAST(startIdx AS CHAR), surfix, ",");
        set startIdx=startIdx+1;
    end while; 
    set ex_sql_out = concat(ex_sql, "(", CAST(endIdx AS CHAR), surfix, ";");
    -- select ex_sql_out from dual; 
end$$
 
drop procedure if exists data_batch_gen$$
create procedure data_batch_gen(IN startIdx int, IN endIdx int, IN prefix varchar(1000), IN surfix varchar(1000)) 
begin
    declare batchSize int default 25000;
    declare batchSize_1 int default batchSize-1;
    declare endIdxGen int default 0;
    set @ex_sql_out = "";
    if(endIdx < batchSize) then
        call data_100w_gen(startIdx, endIdx, prefix, surfix, @ex_sql_out);
                PREPARE data_gen_prep FROM @ex_sql_out;
                EXECUTE data_gen_prep;
                DEALLOCATE PREPARE data_gen_prep;
    else
        while startIdx<=endIdx DO -- 循环开始
            set endIdxGen = startIdx + batchSize_1;
                    if(endIdxGen > endIdx) then
                        set endIdxGen = endIdx;
                    end if;
            call data_100w_gen(startIdx, endIdxGen, prefix, surfix, @ex_sql_out);
                PREPARE data_gen_prep FROM @ex_sql_out;
            EXECUTE data_gen_prep;
            DEALLOCATE PREPARE data_gen_prep;
            set startIdx = endIdxGen + 1;
            select endIdxGen from dual; -- 打印每次生成数量
        end while; -- 循环结束
    end if;
    -- select @ex_sql_out from dual;
end$$
delimiter ;

以上是关于sqlyog和navicat哪个好的主要内容,如果未能解决你的问题,请参考以下文章

作为数据开发,navicat和powerdesigner相比,哪个比较好

用SQLyog或Navicat远程连接数据库

mysql sqlyog提示2058错误或者用Navicat连接本机Docker的Mysql 和一些问题的解决方案

(Sqlyog或Navicat不友好处)SHOW ENGINE INNODB STATUS 结果为空或结果为=====================================

使用navicat for mysql或SQLyog连接阿里云等服务器的mysql

navicat premium15免费版安装说明(附工具)