mysql脚本变量和max函数

时间:2011-10-28 10:03:31

标签: mysql linux

问题很简单。我找不到解决方案,所以我问, 这是* .sql文件的内容:

select @max_command_idx=max(command_idx)+1  from command;
insert into command values(3,0,@max_command_idx+1 ,"sub","ctrlr",1,0,"plan",0);
insert into command values(4,1,@max_command_idx+1 ,"sub","ctrlr",1,0,"pla1n",0);

当我执行脚本时,我希望@max_command_idx是一个固定值。这意味着它应该在两个后续插入语句中替换“相同”值。但它并没有这样做。它的作用是为每个insert语句赋予max_command_idx新值。 这是为什么?我怎么解决它? 谢谢

1 个答案:

答案 0 :(得分:1)

第一行将@max_command_idx设置为null,因为您实际上是在选择布尔条件。所以在运行时:

select @max_command_idx=max(command_idx)+1  from command;

你实际上在说“如果@max_command_idx等于当前最大command_idx + 1,请选择我1,如果不是则选择我0,如果@max_command_idx为空则选择我为空”。

在你的情况下,@ max_command_idx为null,因此布尔结果为null,因此看起来好像@max_command_idx在每个后续插入中重新初始化。

试试这个:

select max(command_idx)+1 into @max_command_idx  from command;
insert into command values(3,0,@max_command_idx+1 ,"sub","ctrlr",1,0,"plan",0);
insert into command values(4,1,@max_command_idx+1 ,"sub","ctrlr",1,0,"pla1n",0);

应该做你想做的......