方法一 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
网友评论