MySQL学习——delete(truncate)

3.5、删除

/*********************************************************第三章 MySQL数据管理3.5 删除p15:Delete和Truncate详解time:12:05*********************************************************/

delete命令

语法:delete from 表名 [where 条件]

-- 删除数据DELETE FROM student -- 不要这么写,这样做会删掉所有的数据-- 1:删除指定数据DELETE FROM student WHERE id = 1

TRUNCATE命令(专门清空数据库的命令)

作用:完全清空一个数据库表,表的结构和索引约束不会变!

-- 2:清空student表TRUNCATE `student`

delete命令与TRUNCATE命令的区别

  • 相同点:都能删除数据,都不会删除表结构
  • 不同点:
    • TRUNCATE 重新设置自增列,计数器会归零
    • TRUNCATE 不会影响事务
CREATE TABLE IF NOT EXISTS `test`( id INT(4) NOT NULL AUTO_INCREMENT, coll VARCHAR(20) NOT NULL, PRIMARY KEY(id))ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO `test`(`coll`) VALUES('1'),('2'),('3');DELETE FROM `test` -- 不会影响自增TRUNCATE TABLE `test` -- 自增会归零

了解即可:==delete删除的问题==,重启数据库(net start mysql),出现以下现象

  • InnoDB 自增列会从1开始(数据是存在内存当中的,断点即失)
  • MyISAM 继续从上一个自增量开始(数据存在文件中的,不会丢失)
-- 3:测试delete与truncate的区别CREATE TABLE IF NOT EXISTS `test`( id INT(4) NOT NULL AUTO_INCREMENT, coll VARCHAR(20) NOT NULL, PRIMARY KEY(id))ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO `test`(`coll`) VALUES('1'),('2'),('3');DELETE FROM `test` -- 不会影响自增TRUNCATE TABLE `test` -- 自增会归零-------------------------------------------------------------------------------------------CREATE TABLE IF NOT EXISTS `test_MyISAM`( id INT(4) NOT NULL AUTO_INCREMENT, coll VARCHAR(20) NOT NULL, PRIMARY KEY(id))ENGINE=MYISAM DEFAULT CHARSET=utf8INSERT INTO `test_MyISAM`(`coll`) VALUES('1'),('2'),('3');DELETE FROM `test_MyISAM` -- 不会影响自增DROP TABLE IF EXISTS `test_myisam`

相关文章