1. DELETE 命令
语法 : delete from 表名 [where 条件]
-- 删除数据 (避免这样写, 会全部删除)
DELETE FROM `student`;
-- 删除指定数据
DELETE FROM `student` WHERE id = 1;
2. TRUNCATE 命令
作用 : 完全清空一个数据库表, 表的结构和索引约束不会变.
-- 清空 student 表
TRUNCATE `student`;
3. DELETE 和 TRUNCATE 的区别
相同点 : 都能删除数据, 都不会删除表结构
不同点 :
- TRUNCATE 会重新设置自增列, 自增列计数器会归零
- TRUNCATE 不会影响事务
测试数据 (测试自增列计数器归零区别) :
CREATE TABLE `test`(
`id` INT(4) NOT NULL AUTO_INCREMENT,
`coll` VARCHAR(20) NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `test`(`coll`) VALUE('1'),('2'),('3');
DELETE FROM `test` -- 不会影响自增
TRUNCATE TABLE `test` -- 自增会归零
第三个区别 (了解即可)
DELETE 删除数据存在一些问题, 需要重启数据库(netstart), 观察现象 :
- 对于数据库引擎是 InnoDB 的, 自增列会重新从 1 开始 (即数据存在内存中, 断电即失)
- 对于数据库引擎是 MySWAM 的, 会继续从上一个自增量开始 (存在文件中的, 不会丢失)