DELIMITER //
CREATE TRIGGER getauto BEFORE INSERT ON autotest FOR EACH ROW
BEGIN
DECLARE i INT;
DECLARE cou INT;
DECLARE num INT;
SET i=0;
SELECT id INTO cou FROM autotest;
WHILE i<=cou DO
SET i=i + 1;
SELECT id INTO num FROM autotest WHERE id=i;
IF num<>i THEN
     ALTER TABLE autotest AUTO_INCREMENT=i;
     SET cou=0;
     END IF;             
END WHILE;
IF num=i THEN
  ALTER TABLE autotest AUTO_INCREMENT=i+1;
  END IF;  
END//
在运行时
ALTER TABLE autotest AUTO_INCREMENT=i;
这里出了问题  如果把i换成数值就可以,问什么用变量就不行了
各位大侠救救小弟!!!!!

解决方案 »

  1.   

    TRIGGER不能针对目表操作!!!
      

  2.   

    可以说的详细一点吗  谢谢
    ALTER TABLE autotest AUTO_INCREMENT=0;
    的话没什么问题的 
      

  3.   

    MYSQL TRIGGER不能对本表操作
      

  4.   


    你需要用prepare 来执行这个语句。mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
    mysql> SET @a = 3;
    mysql> SET @b = 4;
    mysql> EXECUTE stmt1 USING @a, @b;
    +------------+
    | hypotenuse |
    +------------+
    |          5 |
    +------------+
    mysql> DEALLOCATE PREPARE stmt1;
      

  5.   

    忘了说了  我是Java程序员 不懂这写的是什么意思
    我是想做一种情况,就是在页面上删除数据的时候 比如1,2,3,4,5。我删了第2条后 再插数据时也是放在2的位置,如果删除5,那么再插数据时是从5计算的,就是说永远保持1,2,3,4,5 中间不间断的
      

  6.   


    这种实现并不可行。当你删除2后,表中记录为 1,3,4,5 如果你设置为 AUTO_INCREMENT=2 显然当再插入一条记录后,会出现主键冲突。并且在数据库的设计中也不建议这样去修改主键。如果你只是想在显示的时候正确显示1,2,3,4 则可以通过SQL语句来实现。
    你可以参考下贴中的实现方法。http://blog.csdn.net/ACMAIN_CHM/archive/2009/04/20/4095531.aspx
    MySQL中的ROWNUM的实现 
      

  7.   

    理论上主键是不应该再变动的。如果你实现要在表中设置这个需要根据记录变化的ID,则建议再添加一个字段来放这个ID,然后定期使用update 来更新这个字段。