【问题标题】:MySQL export query as insert statementsMySQL 导出查询作为插入语句
【发布时间】:2010-09-24 12:00:27
【问题描述】:

我有两个 mysql 表,它们都有一个共同的 typeID。我想从这两个表中选择具有相同 typeID 的所有内容,查询如下:

SELECT ta.requiredTypeID, ta.typeID, ta.quantity 
  FROM `invtypes` as t, `typeactivitymaterials` as ta 
  WHERE volume > 0 AND t.typeID = ta.typeID;

这给了我正确的结果,但我试图将此查询导出为插入语句。我尝试添加 INTO OUTFILE "/path/" 但这只会将数据导出为制表符/逗号分隔的数据,是否可以将此数据导出为插入语句?

干杯

伊夫

【问题讨论】:

    标签: mysql export


    【解决方案1】:

    把它留在这里,如果有人来寻找创建MySQLexport 查询作为insert 语句的确切查询。此答案使用mysqldump 作为@a'r 建议。

    mysqldump -u<user-name> -p<password> mydb t1 t2 t3 > mydb_tables.sql
    

    【讨论】:

      【解决方案2】:

      您也许可以改用mysqldump。查看参数--tables--where=

      http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

      【讨论】:

      • 我认为这将是原始问题的答案。对我来说效果很好!
      • 是的,如果实例在不同的机器上会更有用。
      【解决方案3】:

      如果您有 MySQL Workbench,它可以为您生成插入语句。

      在 SQL 编辑器中运行您的查询,然后您可以从结果集中单击导出按钮。然后在“另存为类型”中选择为“SQL INSERT statements (*.sql)”。单击保存,确认您要导出的表,然后单击确定。

      如果您打开文件,您应该会看到结果集为带有列名的插入语句。

      我只在一个简单的 select * from table 上对此进行了测试。我没有用多个表测试过这个。我希望这会有所帮助。

      编辑:似乎工作台可用于 Windows、OSX 和 Linux(感谢 vcardillo)

      【讨论】:

      • 超级好用,谢谢。甚至没有注意到另存为类型的下拉菜单。谢谢!
      • 哦,MySQL Workbench 也适用于 OSX 和 Linux。
      • 执行此操作时,SQL INSERT 不包括 Blob 类型的列数据
      【解决方案4】:

      您可以将 INSERT 与 SELECT 结合使用,以直接从 select 语句的结果中插入记录。

      你这样做的方式是这样的:

      INSERT INTO newtable (requiredTypeID, typeID, quantity)
           SELECT ta.requiredTypeID, ta.typeID, ta.quantity 
               FROM `invtypes` as t, `typeactivitymaterials` as ta 
               WHERE volume > 0 AND t.typeID = ta.typeID;
      

      这是相关MySQL manual page的链接。

      请注意,这实际上会立即进行插入;它不会完全按照您的要求进行(即生成插入语句以供以后使用)。

      【讨论】:

        【解决方案5】:

        你可以做这样的事情:

        select 
               concat(
                 concat(
                   concat(
                     concat(
                       concat(
                         concat('insert into <table> (requiredTypeID, typeID, quantity) values ("'
                                ,ta.requiredTypeID)
                       ,'", "')
                     ,ta.typeID)
                   ,'", "')
                 ,ta.quantity)
               ,'")')
        FROM 
               `invtypes` as t, `typeactivitymaterials` as ta 
        WHERE 
               volume > 0 AND t.typeID = ta.typeID;
        INTO OUTFILE 'file_name'  
        

        我知道这很丑,但我认为它可以解决你的问题:)

        【讨论】:

        • concat 可以带两个以上的参数。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-19
        • 1970-01-01
        • 2015-03-07
        • 2018-09-25
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多