我很难过为什么我不能在 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 脚本中使用它时,它不会生成表格。注意:这个 root 用户没有密码。
~$ 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;"
感谢barmar,我现在明白了。要从命令运行整个操作,如果使用临时表,它必须是一个命令。前任:
~$ 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;"
或者使用普通的桌子。
我感谢您的帮助。