MySQL学习——delete(truncate)

Posted ferryboat-huan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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=utf8


INSERT 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=utf8


INSERT 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=utf8

INSERT INTO `test_MyISAM`(`coll`) VALUES('1'),('2'),('3');

DELETE FROM `test_MyISAM`  -- 不会影响自增

DROP TABLE IF EXISTS `test_myisam`

以上是关于MySQL学习——delete(truncate)的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习-MySQL中truncate和delete清除表数据区别

mysql中delete和truncate区别

MySQL——delete 和 truncate 以及 drop 区别

MYSQL:如何清空表中的数据 truncate delete

Mysql清空表(truncate)与删除表中数据(delete)的区别

Mysql清空表(truncate)与删除表中数据(delete)的区别