我无法从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
感谢。
答案 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'