在SQL转储文件上执行SQL查询的最简单方法是什么?

时间:2014-08-08 06:56:15

标签: mysql

是否可以在.sql转储文件上执行查询而不用将其导入数据库?

示例:stuff.sql:

CREATE TABLE IF NOT EXISTS `options` (
...

INSERT INTO `options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES
(1, 'siteurl', 'http://www.someurl.com', 'yes'),
...

然后执行一些SELECT语句以获取选项数据。

当然,我可以在本地数据库中导入转储,执行我想要的操作,再次转​​储它并再次删除数据库,但有没有一种方法可以减少开销?

2 个答案:

答案 0 :(得分:1)

根本没有进口,我不这么认为。但是你有其他选择。您可以将SQL转储导入临时内存专用数据库,然后查询该数据库。例如,如果你的sql是兼容的,那么这可能是一个SQLite :MEMORY:数据库,或者你可以使用Engine=MEMORY(或Engine=HEAP用于旧版本)与MySQL" create table " DDL创建一个内存表,然后查询该数据库(你必须在转储文件中用Engine MEM替换Engine = INNODB或Engine = MyISAM来导入它)。同样的想法。

显然,这取决于您要查询的数据的大小。 1TB数据库可能被证明无法导入RAM。

答案 1 :(得分:0)

你在找这个吗?

Process p = null;
            try {
                Runtime runtime = Runtime.getRuntime();
                p = runtime.exec("mysqldump -uroot -pdbpass --add-drop-database -B dbname -r " + "filepath" + "Filename" + ".sql");
//change the dbpass and dbname with your dbpass and dbname
                int processComplete = p.waitFor();

                if (processComplete == 0) {

                    System.out.println("Backup created successfully!");

                } else {
                    lblMessage.setText("Could not create the backup");
                }


            } catch (Exception e) {
                e.printStackTrace();
            }