- 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后仍保留原来的数值的位置);
- delete from table_name :
复制表
先创建一个表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开始)