有这样的一个简单的表(Student)结构:
ID   NAME      AGE
1    zhangsan  21
2    lisi      22ID是主键,但是不是自动增长列我写了一个存储过程如下:
BEGIN
     declare b DECIMAL;
     declare a DECIMAL;
     set a=(select MAX(id) from student)+1;
     insert into  student values(a,'zhangsan',22);
END每次执行这样的存储过程,都向student表插入了两条记录,这是为什么?
我在set a=(select MAX(id) from student)+1;添加上select a;
这样就正常了,插入了一条记录

解决方案 »

  1.   

    insert into  student 
    select MAX(id)+1,'zhangsan',22 from  student没有触发器吧?
      

  2.   

    表中没有触发器
    我按照你写的运行了一下
    在MySQL中报的错误是:You can't specify target table 'student' for update in FROM clause
      

  3.   

    你的代码贴出来看看,我的没有UPDATE,是MYSQL吧
      

  4.   

    对,是MySQL
    BEGIN 
        declare b DECIMAL; 
        declare a DECIMAL; 
        set a=(select MAX(id) from student)+1; 
        insert into  student values(a,'zhangsan',22); 
    END 
    这已经是他的代码了,表结构就如同上边
      

  5.   

    我是指出现
    You can't specify target table 'student' for update in FROM clause
    提示的代码?我测试过,没有问题啊
      

  6.   

    BEGIN  
         insert into  student values(((select MAX(id) from student)+1),'zhangsan',22);
    END
    是这个
      

  7.   

    仔细看看我的代码
    insert into  student
    select MAX(id)+1,'zhangsan',22 from  student 
      

  8.   

    你的存储过程完整代码,用我的代码,我测试过,在MYSQL SP中可以通过
    DELIMITER $$DROP PROCEDURE IF EXISTS `zz`.`try1`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `try1`()
    BEGIN
    insert into b4 select 'vv',max(je)+100 from b4;
        END$$DELIMITER ;call try1
      

  9.   

    CREATE PROCEDURE `new_test`()
        NOT DETERMINISTIC
        SQL SECURITY DEFINER
        COMMENT ''
    BEGIN   
       insert into  student(select MAX(id)+1,'zhangsan',22 from  student);
    END;这是我的代码,但是没有错误,还是运行插入了两条
      

  10.   

    呵呵,我运行我的代码,只插入一条记录。
    你的两条记录ID是否相同?在MYSQL中,还是在语言中运行?
      

  11.   

    在Mysql中运行的
    CREATE PROCEDURE `new_test1`()
    BEGIN
       insert into  student(select MAX(id)+1,'zhangsan',22 from  student);
    END;call new_test1();我又写了一边,还是这样,是不是根Mysql的版本问题,
    我的是5.0.27的版本
      

  12.   

    更改表的字段ID为je更改存储过程
    CREATE PROCEDURE `try1`()
    BEGIN
    insert into student (select MAX(je)+1,'wangwu',33 from student);
    END运行还是插入了2条
    呵呵,太郁闷了
    跟ID有关系吗?我第一次是这么写的
    BEGIN 
        declare b DECIMAL; 
        declare a DECIMAL; 
        set a=(select MAX(id) from student)+1; 
        select a;//这里加上
        insert into  student values(a,'zhangsan',22); 
    END 
    加个select a;就插入了一行
      

  13.   

    给人感觉好像程序停顿一下就可以了
    Mysql有没有打印的函数
    可以把变量a打印出来
      

  14.   

    换成
    BEGIN
        declare b DECIMAL;
        declare a DECIMAL;
        select MAX(id)  into a from student
        set a=a+1;
        insert into  student values(a,'zhangsan',22);
    END 
    如果还是有问题:1。可能版本有BUG
    2。调用的接口程序有问题,
      

  15.   

    select MAX(id)+1 from student into a;