我正在使用mysql命令行实用程序从shell脚本运行一些MySQL脚本(用于批处理)。在其中一个脚本中,我想创建一个新表,填充它,当我肯定人口成功时,将其重命名为取代旧表,并删除旧表,因此事件序列看起来如此像这样:
create table if not exists mystuff_tmp (
id int(10) unsigned not null auto_increment,
average_value decimal(10,4) default null,
day date not null,
primary key (id)
) engine=InnoDB default charset=utf8;
insert into mystuff_tmp (
average_value,
day
) select
avg(value),
date(input)
from
details
where
input between date(now()) - interval 7 day and date(now)
group by
date(input);
***if there were no errors***
rename table mystuff to mystuff_old, mystuff_tmp to mystuff;
drop table mystuff_old;
在Sybase(及其子代,如MS SQL)中,出现了@@ error, 但我在MySQL中找到的唯一类似的系统变量是error_count,并且不会因会话错误而更新......
答案 0 :(得分:1)
我认为
SELECT @@session.warning_count;
或
SELECT @@session.error_count;
会得到你想要的东西
答案 1 :(得分:0)
我所做的只是将shell脚本分解成几部分。例如:
mysql_cmd="mysql -u$mysql_user -p$mysql_pw $db"
$mysql_cmd <<eot
create table if not exists mystuff_tmp (
id int(10) unsigned not null auto_increment,
average_value decimal(10,4) default null,
day date not null,
primary key (id)
) engine=InnoDB default charset=utf8;
insert into mystuff_tmp (
average_value,
day
) select
avg(value),
date(input)
from
details
where
input between date(now()) - interval 7 day and date(now)
group by
date(input);
eot
if [ $? != 0]
then
$mysql_cmd <<eot
rename table mystuff to mystuff_old, mystuff_tmp to mystuff;
drop table mystuff_old;
eot
fi
答案 2 :(得分:0)
Mysql有error handlers来处理各种错误和警告。在这些错误处理程序中,您可以为变量指定值。在重命名操作之前,您可以检查变量的值。