我很困惑为什么我不能在 bash 脚本中制作临时表。
这适用于命令提示符。
mysql> CREATE TEMPORARY TABLE snorby.delete_me (
SELECT cid AS del_cid
FROM snorby.event
WHERE timestamp < DATE_SUB(NOW(), INTERVAL 21 DAY) );
Query OK, 72 rows affected (0.08 sec)
Records: 72 Duplicates: 0 Warnings: 0
mysql> select * from snorby.delete_me limit 2;
+---------+
| del_cid |
+---------+
| 4 |
| 5 |
+---------+
2 rows in set (0.00 sec)
mysql> DROP TABLE snorby.delete_me;
Query OK, 0 rows affected (0.08 sec)
mysql>
但是当我从命令行执行此操作时,打算在 bash 脚本中使用它,它不会形成表格。注意:此根用户没有密码。
~$ sudo mysql -uroot -e "CREATE TEMPORARY TABLE snorby.delete_me (SELECT cid AS del_cid FROM snorby.event WHERE timestamp < DATE_SUB(NOW(), INTERVAL 21 DAY) );"
~$ sudo mysql -uroot -e "SELECT * FROM snorby.delete_me LIMIT 2;"
ERROR 1146 (42S02) at line 1: Table 'snorby.delete_me' doesn't exist
最后,如果我将这些命令放在.sql文件中并运行它们,它也可以正常工作。例:
~$ mysql -uroot -e "SET @daystokeep=21; source snorby_del_old_by_days.sql;"
多亏了巴马尔,我现在明白了。要从命令运行整个命令,如果使用临时表,它必须全部是一个命令。前任:
~$ sudo mysql -uroot -e "CREATE TEMPORARY TABLE snorby.delete_me (SELECT cid AS del_cid FROM snorby.event WHERE timestamp < DATE_SUB(NOW(), INTERVAL 21 DAY) ); SELECT * FROM snorby.delete_me LIMIT 2; DROP TABLE snorby.delete_me;"
或者使用常规表。
我感谢您的帮助。
它确实会创建表。然后它关闭会话,这会破坏表。找到另一种方法来做到这一点。
将代码更改为以下内容应该允许它工作:
~$ sudo mysql -uroot -e "CREATE TEMPORARY TABLE snorby.delete_me (SELECT cid AS del_cid FROM snorby.event WHERE timestamp < DATE_SUB(NOW(), INTERVAL 21 DAY) ); SELECT * FROM snorby.delete_me LIMIT 2;"