MySql 几种删除方式区别 drop、delete、truncate

  • drop
    drop table table_name : 删除表全部数据和表结构,立刻释放磁盘空间,不管是 Innodb 和 MyISAM;
  • truncate 和 delete
    • truncate table table_name : 删除表全部数据,保留表结构,立刻释放磁盘空间 ,不管是 Innodb 和 MyISAM(truncate之后的自增字段从头开始计数);
    • delete from table_name :
      1>删除表全部数据,保留表结构,对于 MyISAM 会立刻释放磁盘空间,InnoDB 不会释放磁盘空间(delete后仍保留原来的数值的位置);
      2>若想实现带条件的删除,只有用delete
      delete from table_name where xxx : 带条件的删除,表结构不变,不管是 innodb 还是 MyISAM 都不会释放磁盘空间(delete后仍保留原来的数值的位置);

复制表

先创建一个表c_p作为原表

CREATE TABLE `c_p` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `country` varchar(20) DEFAULT NULL,
  `population` int(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `country` (`country`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4;

方法1:复制表为c_p_copy1
step1:复制表结构

CREATE TABLE `c_p_copy1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `country` varchar(20) DEFAULT NULL,
  `population` int(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `country` (`country`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4;

或者是用

create table c_p_copy1 like c_p

step2:插入数据

insert into c_p_copy1(id,country,population)
select * from c_p 

方法二:复制表为c_p_copy2

这种比较简洁,但是没有复制索引,主键等结构,只复制了数据,所以不推荐

create table c_p_copy2 select * from c_p

拓展:复制一部分数据的方法

1>拷贝一个表中其中的一些字段:

CREATE TABLE c_p_copy3  AS
(SELECT id, population FROM c_p)

2>拷贝一部分数据:

CREATE TABLE c_p_copy4  AS
( SELECT * FROM c_p  WHERE id = 1)

删除表

drop table c_p_copy1;
完全删除,表不存在了

TRUNCATE c_p_copy1
数据删除,表结构存在,再次插入数据,第一行id为1

DELETE from c_p_copy1
数据删除,表结构存在,再次插入数据,第一行id不为1,即delete后 仍保留原来数值的位置(假如原来表中有7行,delete后id从8开始)

你可能感兴趣的:(Mysql)