mysql如何删除数据表和关联的数据表删除详情
作者:公号运维家 发布时间:2024-01-25 19:12:55
前言
删除数据表的时候,表的定义和表中所有的数据均会被删除。因此,在进行删除操作前,最好对表中的数据做一个备份,以免造成无法挽回的后果。
mysql
删除数据表分为两种情况;
mysql
删除没有关联的表;mysql
删除被关联的表;
下面我们就分别来看一下这两种情况;
一、mysql删除没有被关联的表
语法:
drop table [if exists] 表1, 表2,...,表n;
可以同时删除多个表,只需要将删除的表名依次写到后面就行,相互之间用逗号隔开即可。如果删除的表不存在会报错。
if exists
用于在删除前判断被删除的表是否存在,加上该参数后,再删除表的时候,如果表不存在,sql
不会报错,可以顺利执行下去,但是会发去警告(warning
)。
举个栗子:
删除一个名为test_user_3
的数据表;
执行sql
语句;
mysql> drop table if exists test_user_3;
Query OK, 0 rows affected (0.02 sec)
mysql>
然后我们再次查看的时候,就会发现,这个表已经不见了;
mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| test_dept |
| test_user |
| test_user_4 |
| test_user_5 |
| test_user_6 |
| test_user_7 |
| test_user_8 |
| test_user_9 |
| test_user_two |
+-------------------+
9 rows in set (0.00 sec)
mysql>
二、删除被其他表关联的主表
在两个数据表相互关联的情况下,如果直接删除主表,会显示失败,原因就是直接删除主表会破坏表的参照完整性。
如果的确有删除主表的需求,可以先删除与它关联的子表,然后再删除父表,不过这样的话就同时删除了两个表中的数据。
因为我们有时候是要保留子表,仅仅是想要删除主表的数据的,那么我们应该如何处理呢?首先我们取消外键约束条件,然后就可以删除主表了。
举个栗子:
创建一个临时数据表,名字为ceshi_1
,让他当做这个关联关系中的父表,sql
语句如下:
mysql> create table ceshi_1 (id INT primary key, name varchar(50), area varchar(50));
Query OK, 0 rows affected (0.04 sec)
mysql>
然后我们再创建一个临时数据表,名字为ceshi_2
,让他当做这个关联关系中的子表,sql
语句如下;
mysql> create table ceshi_2 (id int primary key, name varchar(50), deptid int, constraint yunweijia_ceshi foreign key(deptid) references ceshi_1(id));
Query OK, 0 rows affected (0.05 sec)
mysql>
查看下我们新建的临时表ceshi_2
的外键约束,结果:
mysql> show create table ceshi_2\G;
*************************** 1. row ***************************
Table: ceshi_2
Create Table: CREATE TABLE `ceshi_2` (
`id` int NOT NULL,
`name` varchar(50) DEFAULT NULL,
`deptid` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `yunweijia_ceshi` (`deptid`),
CONSTRAINT `yunweijia_ceshi` FOREIGN KEY (`deptid`) REFERENCES `ceshi_1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
然后我们尝试删除这个父表ceshi_1
;
mysql> drop table ceshi_1;
ERROR 3730 (HY000): Cannot drop table 'ceshi_1' referenced by a foreign key constraint 'yunweijia_ceshi' on table 'ceshi_2'.
mysql>
可以看到他报错了,报错说的是ceshi_1
中有一个外键名为yunweijia_ceshi
,在ceshi_2
中,所以删除失败了。
那么我们接下来接触下关联关系;
mysql> alter table ceshi_2 drop foreign key yunweijia_ceshi;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>
这个时候我们再次尝试删除下ceshi_1
这个父表;
mysql> drop table ceshi_1;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| ceshi_2 |
| test_dept |
| test_user |
| test_user_4 |
| test_user_5 |
| test_user_6 |
| test_user_7 |
| test_user_8 |
| test_user_9 |
| test_user_two |
+-------------------+
10 rows in set (0.00 sec)
mysql>
可以看到我们顺利的删除了名为ceshi_1
的父表,查看整个数据库中也没有了这个数据表。
来源:https://blog.51cto.com/u_12386780/5479901


猜你喜欢
- linux中,可以使用指令pip install lmdb安装lmdb包。----lmdb 数据库文件生成增 改 删查1、生成一个空的lmd
- 字典的常用方法方便举例,先创建2个字典list_test={"bob":19,"aoa":18,&q
- 优先级队列概述队列,是数据结构中实现先进先出策略的一种数据结构。而优先队列则是带有优先级的队列,即先按优先级分类,然后相同优先级的再 进行排
- 1. isset功能:判断变量是否被初始化 说明:它并不会判断变量是否为空,并且可以用来判断数组中元素是否被定义过
- 循环可以用来重复执行某条语句,直到某个条件得到满足或遍历所有元素。1 for循环是for循环,可以把集合数据类型list、tuple、dic
- Windows 10 x64macOS Sierra 10.12.4Python 2.7准备好装哔~了么,来吧,做个真正意义上的绿色小软件W
- 异步过渡方案Generator在使用 Generator 前,首先知道 Generator 是什么。如果读者有 Python 开发经验,就会
- 在JavaScript中四种基本的数据类型:数值(整数和实数)、字符串型(用“”号或‘'括起来的字符或数值)、布尔型(使True或F
- pandas in 和 not in 的用法经常在处理数据中从一个总数据中清洗出数据, 但是有时候需要把没有处理的数据也统计出来.这时候就需
- 工作中,经常会有用python访问各种数据库的需求,比如从oracle读点配置文件或者往mysql写点结果信息之类的。这里列一下可能用到的各
- 前言在开发中经常需要配置提交git的忽略文件,本篇来学习下使用pycharm自动生成.ignore文件安装插件Files->setti
- if (reValue== undefined){ alert("undefined"); } 发现判断不出来,最后查了
- 相对于C语言,golang是类型安全的语言。但是安全的代价就是性能的妥协。下面我们看看Golang不想让我们看到的“秘密”——string的
- 在参加“数据挖掘”比赛中遇到了关于函数高次拟合的问题,然后就整理了一下源码,以便后期的学习与改进。在本次“数据挖掘”比赛中感觉收获最大的还是
- MySQL有多种存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、
- 字符串函数查看字符的ascii码值ascii(str),str是空串时返回0select ascii('a');
- 定义临时变量:{% with i=1 %}{{i}}{% endwith %}定义对临时变量操作的tag在templatetags中创建se
- 用于处理XML文档的DOM元素属性 childNodes:返回当前元素所有子元素的数组; firstChild:返回当前元素的第一个下级子元
- 不得不说使用python库matplotlib绘图确实比较丑,但使用起来还算是比较方便,做自己的小小研究可以使用。这里记录一些统计作图方法,
- 1.前言数据库的重要性相信大家都有所了解,作为各种数据的电子资料夹,其中可能包含了各种信息,从企业员工信息到网站访问或成交数据无所不包,甚至