mysql shell 删除数据库表的全部数据

方法一 delete from <表名> :

# 此方法删除表内全部数据后,返回删除数据的数量
# 如果表内有自增字段,它的起始值保留当前数值
mysql> delete from course;
Query OK, 60 rows affected (0.02 sec)

方法二 truncate table <表名> :

# 如果表内有自增字段,它的起始值恢复为 1
# 删除速度比 delete 快
# 当表的主键有外键约束时,无法删除数据,会报类似下面的错误(delete 方法无此问题):
mysql> truncate table user;
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key ...

# 因为 course 类设置了外键约束
# 执行 show create table course\G 查看 course 表的全部信息
mysql> show create table course\G
*************************** 1. row ***************************
       Table: course
Create Table: CREATE TABLE `course` (
  `create_at` datetime DEFAULT NULL,
  `update_at` datetime DEFAULT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  `author_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ix_course_name` (`name`),
  KEY `author_id` (`author_id`),
  CONSTRAINT `course_ibfk_1` FOREIGN KEY (`author_id`) REFERENCES `user` (`id`) 
  ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

# 执行此命令删除 course 表的外键约束
mysql> alter table course drop foreign key course_ibfk_1;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

# 然后就可以用 truncate 删除 user 表的全部数据了
mysql> truncate table user;
Query OK, 0 rows affected (0.00 sec)

# 最后执行此命令重新设置外键即可
mysql> alter table course add constraint foreign key course(author_id) references 
user(id);
Query OK, 0 rows affected (0.16 sec)
Records: 0  Duplicates: 0  Warnings: 0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容