从mysql视图中选择outfile

时间:2014-02-11 16:30:31

标签: mysql

我无法从mysql中的视图中选择数据到outfile。

SELECT *
INTO OUTFILE '/tmp/test.txt'
FROM test_view;

我收到以下错误:

  

错误1356(HY000)第1行:查看'test_view'引用无效的表格或列或功能或定义者/调查者缺乏使用它们的权利

当我只在sql中使用以下内容时,没关系。

SELECT *
FROM test_view;

我正在使用mysql版本:5.1.69

感谢。

2 个答案:

答案 0 :(得分:0)

即使我在我的数据库上使用 root 用户,我也遇到了同样的问题。 遗憾的是,我无法解释为什么简单的 SELECT 查询有效,但在使用 SELECT INTO OUTFILE 时却失败了。

可能还有其他解决方案,可能这对您不起作用,但无论如何我想分享我的解决方案,因为不存在批准的答案。

在我的例子中,我检查了视图定义并找到了在 frm 文件中也可见的设置:definer_user=<other username>,但在视图中,安全设置被设置为 Definer 而不是 {{ 1}}。

就我而言,将支持团队中的随机人员设置为定义者是没有意义的。我不知道 SQL 安全性的详细变化,所以我只是将视图的定义器更改为 Invoker

将视图的定义器设置为 root@% 后(显然您可以根据需要设置其他主机)该语句对我来说效果很好。

答案 1 :(得分:-2)

MySQL提供了一种简单的机制,用于将select语句的结果写入服务器上的文本文件中。使用INTO OUTFILE命名法的扩展选项,可以创建逗号分隔值(CSV),可以将其导入电子表格应用程序(如OpenOffice或Excel)或任何其他接受CSV格式数据的应用程序。

给出诸如

之类的查询
SELECT order_id,product_name,qty FROM orders

返回三列数据,结果可以使用查询放入文件/tmo/orders.txt中:

SELECT order_id,product_name,qty FROM orders
INTO OUTFILE '/tmp/orders.txt'

这将创建一个制表符分隔的文件,每行都在其自己的行上。要更改此行为,可以向查询添加修饰符:

SELECT order_id,product_name,qty FROM orders
INTO OUTFILE '/tmp/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'