我正在尝试将选择查询的结果保存到文件中,然后截断该数据库表。对于备份,我运行一个查询,该查询使用一个 shell 变量来确定我需要备份多少天,它工作正常,我保存了一个文件,完全按照我的意愿工作。
SET @sql_text = CONCAT ( "SELECT * FROM databasename.tablename WHERE (datetimestamp < (NOW()) AND datetimestamp > (DATE_SUB(NOW(),INTERVAL ",$daysback," DAY))) into outfile 'filename-" , DATE_FORMAT( NOW(), '%Y%m%d%H%i') , ".csv'" , "FIELDS TERMINATED BY ',' " , "LINES TERMINATED BY '\n' ");
PREPARE s1 FROM @sql_text;
EXECUTE s1;
DROP PREPARE s1;
daysback 的值来自 shell 脚本(用户输入)。好的,所以这部分工作。
现在,当我尝试在同一行上执行某些操作以删除旧条目时,它就是行不通..
SET @sql_text = CONCAT("DELETE FROM databasename.tablename WHERE datetimestamp < DATE_SUB(NOW(), INTERVAL ",$daysret," DAY)");
PREPARE s1 FROM @sql_text;
EXECUTE s1;
DROP PREPARE s1;
再次,这里的变量 daysret 来自脚本并且值是正确的,我敢肯定,在进入 MySQl shell 之前尝试回显两个变量的值..
此外,我也尝试过
Set @daysret1=$daysret;
SELECT @daysret1 ;
我得到了 daysret1 的正确值,表明 daysret 的值也是正确的。还尝试直接在查询中使用@daysret1,但即使这样也无济于事。我尝试了双引号的各种变体以及该删除语句中没有的内容,但它只是无法完成它的工作。如果我直接使用数字(无变量),效果很好,所以命令很好,它只是与变量本身有关。
此外,如果存在语法错误,那么 MySql 实际上会显示错误(在该查询中使用引号、逗号等时遇到了一些错误),但是在我上面发布的命令中,没有任何反应,脚本挂起,并且不会从数据库中删除任何内容。
请帮忙!
PS:如果有更好的方法,那么我会全神贯注..目前这些语句正在这样的块内运行..
mysql -u$user -p$pass << EOF
....
....
EOF