Fra*_*ois 291
不要删除,使用truncate:
Truncate table XXX
Run Code Online (Sandbox Code Playgroud)
表处理程序不记得上次使用的AUTO_INCREMENT值,但从头开始计数.即使对于通常不重用序列值的MyISAM和InnoDB也是如此.
来源.
a_h*_*ame 79
如果您无法使用TRUNCATE(例如,由于外键约束),您可以在删除所有行后使用alter table重新启动auto_increment:
ALTER TABLE mytable AUTO_INCREMENT = 1
Run Code Online (Sandbox Code Playgroud)
小智 17
如果表有外键,那么我总是使用以下代码:
SET FOREIGN_KEY_CHECKS = 0; -- disable a foreign keys check
SET AUTOCOMMIT = 0; -- disable autocommit
START TRANSACTION; -- begin transaction
/*
DELETE FROM table_name;
ALTER TABLE table_name AUTO_INCREMENT = 1;
-- or
TRUNCATE table_name;
-- or
DROP TABLE table_name;
CREATE TABLE table_name ( ... );
*/
SET FOREIGN_KEY_CHECKS = 1; -- enable a foreign keys check
COMMIT; -- make a commit
SET AUTOCOMMIT = 1 ;
Run Code Online (Sandbox Code Playgroud)
但差异在于执行时间.看看Sorin的回答.
小智 8
一个有趣的事实.
我相信TRUNCATE总会有更好的表现,但在我的情况下,与外键,人口只有几行约30表的数据库,它花了大约12秒,TRUNCATE所有的表,而不是只有几百毫秒DELETE的行.设置自动增量总共增加了一秒,但它仍然好多了.
因此,我建议尝试两者,看看哪种方法更适合您的情况.
如果你想truncate使用这个:
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table $table_name;
SET FOREIGN_KEY_CHECKS = 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
255202 次 |
| 最近记录: |