zoukankan      html  css  js  c++  java
  • MySQL数据库有外键约束时使用truncate命令的办法

    MySQL数据库操作中,Delete与Truncate两个命令都可以删除一个数据表中的全部数据,使用办法分别是:

    DELETE FROM t_question 

    TRUNCATE TABLE t_question

    但两种命令对数据表操作后,当添加数据时,实际效果还是不同的。Delete命令只是删除里面的记录,当插入新记录时,自增主键仍然在已经删除的记录基础上进行自增,即不会回到从1开始的情况;而Truncate命令则是重构了数据表,所以,使用Truncate命令后的数据表,当插入新记录时,自增主键从1开始,和一个新建的表一样。

    实用中,如果是开发一个MySQL应用,开始可能使用的是测试数据,当应用开发成功后,需要将真正的数据导入到数据表中,为了使自增主键从1开始,使用Truncate操作数据表是必须的,因此,使用Truncate不可避免。

    在MySQL数据库中,如果一个数据表有外键约束(foreign key constraint),那么是无法使用Truncate命令的,总是出现错误如下:

    [Err] 1701 - Cannot truncate a table referenced in a foreign key constraint(....................)

    解决办法有如下几种:

    第一种办法:将对该表进行外键约束的相关表外键约束全部删除,等将表Truncate成功后,再恢复其它表对该表的外键约束,这种办法比较麻烦,不建议使用;

    第二种办法:将对该表进行外键约束的相关表转存(dump),比如使用工具Navicat中的“Dump SQL File”,如果有数据,连数据带结构一并转存,如果无数据,只转存结构;这一步完成后,将外键约束的相关表删除。将主表Truncate成功后,再把外键约束的相关表恢复回来即可。这种办法不需要手动删除外键,虽然把整个表删除了,但表的结构及数据都完好地保存在SQL文件中,可以简单地恢复。

  • 相关阅读:
    oracle 3大范式 理解
    RobHess的SIFT代码解析之RANSAC
    RobHess的SIFT代码解析步骤四
    RobHess的SIFT代码解析步骤三
    RobHess的SIFT代码解析步骤二
    《我的十年图像生涯》—王郑耀(西安交通大学)
    图像卷积
    多尺度分析方法及表达方式
    图像处理中双线性插值
    程序面试题——C实现
  • 原文地址:https://www.cnblogs.com/wusir/p/3631647.html
Copyright © 2011-2022 走看看