美文网首页
mysql shell 删除数据库表的全部数据

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

作者: Manchangdx | 来源:发表于2018-04-04 01:01 被阅读0次

    方法一 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
    

    相关文章

      网友评论

          本文标题:mysql shell 删除数据库表的全部数据

          本文链接:https://www.haomeiwen.com/subject/nhuhhftx.html