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换成数值就可以,问什么用变量就不行了
各位大侠救救小弟!!!!!
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换成数值就可以,问什么用变量就不行了
各位大侠救救小弟!!!!!
ALTER TABLE autotest AUTO_INCREMENT=0;
的话没什么问题的
你需要用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;
我是想做一种情况,就是在页面上删除数据的时候 比如1,2,3,4,5。我删了第2条后 再插数据时也是放在2的位置,如果删除5,那么再插数据时是从5计算的,就是说永远保持1,2,3,4,5 中间不间断的
这种实现并不可行。当你删除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的实现