簡單介紹mysql如何刪除資料表和關聯的資料表刪除詳情

大雄45發表於2022-08-12
導讀 這篇文章主要介紹了mysql如何刪除資料表和關聯的資料表刪除詳情,刪除資料表的時候,表的定義和表中所有的資料均會被刪除。因此,在進行刪除操作前,最好對錶中的資料做一個備份,以免造成無法挽回的後果
前言

刪除資料表的時候,表的定義和表中所有的資料均會被刪除。因此,在進行刪除操作前,最好對錶中的資料做一個備份,以免造成無法挽回的後果。

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的父表,檢視整個資料庫中也沒有了這個資料表。

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2910109/,如需轉載,請註明出處,否則將追究法律責任。

相關文章