MySQL - 刪除檢視



MySQL 檢視是一個虛擬表,它由預定義的 SQL 查詢生成。它包含一個或多個數據庫表中的(全部或選擇性)記錄。

檢視不會物理地儲存在資料庫中,但如果不需要,它們仍然可以被刪除。即使它們用於檢視和修改資料庫表中的資料,當檢視被刪除時,該表中的資料保持不變。

MySQL DROP VIEW 語句

MySQL 中的 **DROP VIEW** 語句用於刪除現有檢視及其定義和其他資訊。一旦檢視被刪除,所有對它的許可權也將被移除。我們還可以使用此語句刪除索引檢視。

假設使用 DROP TABLE 命令刪除一個表,並且它有一個與之關聯的檢視,則必須使用 DROP VIEW 命令顯式刪除此檢視。

**注意** -

  • 在嘗試執行查詢時,資料庫引擎會檢查該語句中引用的所有物件是否有效且存在。因此,如果資料庫中不存在檢視,則 DROP VIEW 語句將丟擲錯誤。

  • 要刪除資料庫中的表,必須在該表上擁有 ALTER 許可權,並在表模式上擁有 CONTROL 許可權。

語法

以下是 DROP VIEW 語句的語法:

DROP VIEW view_name;

其中,view_name 是要刪除的檢視的名稱。

示例

假設我們使用以下 CREATE TABLE 查詢建立了一個名為 CUSTOMERS 的表:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR(15) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS VARCHAR(25),
   SALARY DECIMAL(10, 2),
   PRIMARY KEY(ID)
);

讓我們使用以下 INSERT 查詢在上面建立的表中插入記錄:

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', '32', 'Ahmedabad', 2000),
(2, 'Khilan', '25', 'Delhi', 1500),
(3, 'Kaushik', '23', 'Kota', 2500),
(4, 'Chaitali', '26', 'Mumbai', 6500),
(5, 'Hardik','27', 'Bhopal', 8500),
(6, 'Komal', '22', 'MP', 9000),
(7, 'Muffy', '24', 'Indore', 5500);

建立檢視:

現在,讓我們使用如下所示的 CREATE VIEW 語句在此表上建立一個檢視:

CREATE VIEW testView AS SELECT * FROM CUSTOMERS;

您可以使用以下查詢驗證所有檢視的列表:

SHOW FULL TABLES WHERE table_type = 'VIEW';

檢視將如下建立:

sample 資料庫中的表 表型別
testview VIEW

刪除檢視:

以下查詢刪除上面建立的檢視:

DROP VIEW testView;

驗證

要驗證我們是否已刪除檢視,請使用以下查詢顯示檢視列表:

SHOW FULL TABLES WHERE table_type = 'VIEW';

由於檢視已刪除,因此返回空集。

Empty set (0.12 sec)

IF EXISTS 子句

如果您嘗試刪除不存在的檢視,則會生成錯誤。讓我們來看一個示例,我們使用以下查詢刪除名為 NEW 的檢視:

DROP VIEW NEW;

將顯示以下錯誤(其中“tutorialspoint”是資料庫名稱):

ERROR 1051 (42S02): Unknown table 'tutorialspoint.new'

但是,如果您在 DROP VIEW 語句中使用 **IF EXISTS** 子句,如下所示,即使不存在具有給定名稱的 VIEW,查詢也將被忽略。

DROP VIEW IF EXISTS NEW;

從檢視中刪除行

除了刪除整個檢視之外,我們還可以使用帶有 WHERE 子句的 DELETE 語句刪除檢視的選定行。

語法

以下是 DELETE 語句的語法:

DELETE FROM view_name WHERE condition;

示例

在此示例中,讓我們首先使用以下查詢在 CUSTOMERS 表上建立一個 testView:

CREATE VIEW testView AS SELECT * FROM CUSTOMERS;

現在,使用以下查詢,您可以從在 CUSTOMERS 表上建立的 testView 中刪除記錄。對檢視中資料所做的更改最終將反映在基礎表 CUSTOMERS 中。

DELETE FROM testView WHERE Location = 'Indore';

關聯表 CUSTOMERS 將具有以下記錄:

ID 姓名 年齡 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00

使用客戶端程式刪除檢視

除了使用 MySQL 查詢從 MySQL 資料庫中刪除檢視之外,我們還可以使用客戶端程式對錶執行其他操作。

語法

以下是各種程式語言中從 MySQL 刪除檢視的語法:

MySQL PHP 聯結器 **mysqli** 提供了一個名為 **query()** 的函式,用於在 MySQL 資料庫中執行 DROP VIEW 查詢。

$sql="DROP VIEW view_name";
$mysqli->query($sql);

MySQL NodeJS 聯結器 **mysql2** 提供了一個名為 **query()** 的函式,用於在 MySQL 資料庫中執行 DROP VIEW 查詢。

sql="DROP VIEW view_name";
con.query(sql);

我們可以使用 **JDBC 型別 4** 驅動程式使用 Java 與 MySQL 通訊。它提供了一個名為 **execute()** 的函式,用於在 MySQL 資料庫中執行 DROP VIEW 查詢。

String sql = "DROP VIEW view_name";
statement.execute(sql);

**MySQL Connector/Python** 提供了一個名為 **execute()** 的函式,用於在 MySQL 資料庫中執行 DROP VIEW 查詢。

drop_view_query = "DROP VIEW view_name"
cursorObj.execute(drop_view_query);

示例

以下是該操作在各種程式語言中的實現:

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$dbname = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

if ($mysqli->connect_errno) {
    printf("Connect failed: %s
", $mysqli->connect_error); exit(); } // printf('Connected successfully.
'); // drop a view; $sql = "DROP VIEW first_view"; if ($mysqli->query($sql)) { printf("View dropped successfully!.
"); } if ($mysqli->errno) { printf("View could not be dropped!.
", $mysqli->error); } $mysqli->close();

輸出

獲得的輸出如下:

View dropped successfully!.
var mysql = require('mysql2');
var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "Nr5a0204@123"
});

  //Connecting to MySQL
  con.connect(function (err) {
  if (err) throw err;
  console.log("Connected!");
  console.log("--------------------------");

  sql = "create database TUTORIALS"
  con.query(sql);

  sql = "USE TUTORIALS"
  con.query(sql);

  sql = "CREATE TABLE dispatches_data(ProductName VARCHAR(255),CustomerName VARCHAR(255),DispatchTimeStamp timestamp,Price INT,Location VARCHAR(255));"
  con.query(sql);

  sql = "insert into dispatches_data values('Key-Board', 'Raja', TIMESTAMP('2019-05-04', '15:02:45'), 7000, 'Hyderabad'),('Earphones', 'Roja', TIMESTAMP('2019-06-26', '14:13:12'), 2000, 'Vishakhapatnam'),('Mouse', 'Puja', TIMESTAMP('2019-12-07', '07:50:37'), 3000, 'Vijayawada'),('Mobile', 'Vanaja' , TIMESTAMP ('2018-03-21', '16:00:45'), 9000, 'Chennai'),('Headset', 'Jalaja' , TIMESTAMP('2018-12-30', '10:49:27'), 6000, 'Goa');"
  con.query(sql);

  //Creating Views
  sql = "CREATE VIEW testView AS SELECT * FROM dispatches_data;"
  con.query(sql);

  sql = "CREATE VIEW sample AS SELECT ProductName, Price FROM dispatches_data;"
  con.query(sql);

  sql = "CREATE VIEW demo AS SELECT * FROM dispatches_data WHERE Price>3000;"
  con.query(sql);

  //Displaying list of all views
  sql = "SHOW FULL TABLES WHERE table_type = 'VIEW';"
  con.query(sql, function(err, result){
    if (err) throw err
    console.log("**Views before deleting:**");
    console.log(result);
    console.log("--------------------------");
  });

  //Dropping views
  sql = "DROP VIEW demo;"
  con.query(sql);

  sql = "DROP VIEW sample;"
  con.query(sql);

  sql = "DROP VIEW testview;"
  con.query(sql);

  //retrieve the list of views 
  sql = "SHOW FULL TABLES WHERE table_type = 'VIEW';"
  con.query(sql, function(err, result){
    if (err) throw err
    console.log("**Views after deleting:**");
    console.log(result);
  });
});

輸出

生成的輸出如下:

Connected!
--------------------------
**Views before deleting:**
[
  { Tables_in_tutorials: 'demo', Table_type: 'VIEW' },
  { Tables_in_tutorials: 'sample', Table_type: 'VIEW' },
  { Tables_in_tutorials: 'testview', Table_type: 'VIEW' }
]
--------------------------
**Views after deleting:**
[]
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DropView {
   public static void main(String[] args) {
      String url = "jdbc:mysql://:3306/TUTORIALS";
      String username = "root";
      String password = "password";
      try {
         Class.forName("com.mysql.cj.jdbc.Driver");
         Connection connection = DriverManager.getConnection(url, username, password);
         Statement statement = connection.createStatement();
         System.out.println("Connected successfully...!");

         //Drop a View.....
         String sql = "DROP VIEW tutorial_view";
         statement.executeUpdate(sql);
         System.out.println("View dropped Successfully...!");
         ResultSet resultSet = statement.executeQuery("SELECT * FROM tutorial_view");
         while (resultSet.next()) {
            System.out.print(resultSet.getString(1));
            System.out.println();
         }
         connection.close();
      } catch (Exception e) {
         System.out.println(e);
      }
   }
}

輸出

獲得的輸出如下所示:

Connected successfully...!
View dropped Successfully...!
java.sql.SQLSyntaxErrorException: Table 'tutorials.tutorial_view' doesn't exist
Python Program
import mysql.connector
#establishing the connection
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='tut'
)
cursorObj = connection.cursor()
drop_view_query = "DROP VIEW tutorial_view"
cursorObj.execute(drop_view_query)
connection.commit()
print("View dropped successfully.")
cursorObj.close()
connection.close()

輸出

以下是上述程式碼的輸出:

View dropped successfully.
廣告