对数据库中的表操作之后 id会自动增加1 这个效果是需要的
但是把数据全删除时 id 不是从1开始 是继续递增
通过执行truncate table table_name 可以使表的id重置为从1开始 可是表中的数据也没有了
问:
如何不删除数据 将数据库中的id重置

解决方案 »

  1.   

    -- 先将数据放到一个临时表中
    CREATE TEMPORARY TABLE tmp_name
    AS
        SELECT xx,xxx,xxxx FROM table_name;TRUNCATE TABLE table_name;INSERT tmp_name(xx,xxx,xxx) 
        SELECT xx,xxx,xxxx FROM tmp_name;DROP TABLE tmp_name;
      

  2.   

    加上order by 就可以避免主键的冲突了。mysql> create table table1(
        ->  id int AUTO_INCREMENT primary key,
        ->  col1 int
        -> );
    Query OK, 0 rows affected (0.16 sec)mysql>
    mysql> insert into table1(col1) values
        -> (1),(2),(3),(4),(5);
    Query OK, 5 rows affected (0.08 sec)
    Records: 5  Duplicates: 0  Warnings: 0mysql>
    mysql> select * from table1;
    +----+------+
    | id | col1 |
    +----+------+
    |  1 |    1 |
    |  2 |    2 |
    |  3 |    3 |
    |  4 |    4 |
    |  5 |    5 |
    +----+------+
    5 rows in set (0.00 sec)mysql>
    mysql> update table1 set id=id+1;
    ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'mysql> update table1 set id=id+1 order by id desc;
    Query OK, 5 rows affected (0.06 sec)
    Rows matched: 5  Changed: 5  Warnings: 0mysql> select * from table1;
    +----+------+
    | id | col1 |
    +----+------+
    |  2 |    1 |
    |  3 |    2 |
    |  4 |    3 |
    |  5 |    4 |
    |  6 |    5 |
    +----+------+
    5 rows in set (0.00 sec)mysql>
      

  3.   

    假设ID为自增
    alter table dd drop id;
    alter table dd add `id` int aUTO_INCREMENT, ADD INDEX (id);
    ALTER TABLE dd AUTO_INCREMENT = 1;
    select * from dd
      

  4.   

    但是把数据全删除时 id 不是从1开始 是继续递增
    通过执行truncate table table_name 可以使表的id重置为从1开始 可是表中的数据也没有了

    那你的需求到底是什么?要不要保留表中的数据?如果不保留数据,则直接用你的方法 truncate table table_name 就行了。如果保留数据则不行,因为 AUTO_INCREMENT  必须是主键。
      

  5.   


    楼主这个想法只有二楼的大搬运能实现。否则与mysql规则相抵触。