Почему мой сценарий bash не создает временную таблицу mysql?

Я в тупике, почему я не могу создать временную таблицу в сценарии 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;"

Благодаря бармару, я понимаю сейчас. Чтобы запустить все это из команды, это должна быть вся одна команда, если используется таблица temp. Пример:

~$ 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;"

Или используйте обычную таблицу.

Я благодарю за помощь.

2 ответа

Он создает таблицу. И затем он закрывает сеанс, который разрушает таблицу. Найдите другой способ сделать это.


Изменение кода на следующее должно позволить ему работать:

~$ 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;"

licensed under cc by-sa 3.0 with attribution.