1. 程式人生 > >MySQL-刪除數據(DELECT)

MySQL-刪除數據(DELECT)

sql數據庫 有用 mage create 訂單 建立 插入語 sql語句 row

數據庫備份介紹:

數據庫一旦刪除數據,它就會永遠消失。 因此,在執行DELETE語句之前,應該先備份數據庫,以防萬一要找回刪除過的數據。

MySQL提供了非常有用的工具,用於在服務器上本地備份或轉儲MySQL數據庫。

MySQLDump是由MySQL提供的程序,可用於轉儲數據庫以備數據庫或將數據庫傳輸到另一個數據庫服務器。

轉儲文件包含一組用於創建數據庫對象的SQL語句。 此外,mysqldump可用於生成CSV,分隔符或XML文件。

數據庫備份操作:

要備份MySQL數據庫,數據庫首先必須存在於數據庫服務器中,並且您也可以訪問該服務器。 如果沒有遠程桌面,可以使用SSHTelnet登錄到遠程服務器。

數據庫備份
mysqldump -u [username] –p[password] [database_name] > [dump_file.sql]

  • [username]:有效的MySQL用戶名。
  • [password]:用戶的有效密碼。 請註意,-p和密碼之間沒有空格。
  • [database_name]: 要備份的數據庫名稱
  • [dump_file.sql]: 要生成的轉儲文件。

執行上述命令,所有數據庫結構和數據將導出到一個[dump_file.sql]轉儲文件中。

 數據庫備份實例:

mysqldump -u root –p123456  yiibaidb > D:\worksp\bakup\yiibaidb001.sql

僅備份數據庫結構操作:

如果只想備份數據庫結構而不需要備份數據,那麽只需要添加一個選項-no-data來告訴mysqldump只需要導出數據庫結構。

mysqldump -u [username] –p[password] –no-data [database_name] > [dump_file.sql]

實例:
C:\Users\Administrator> mysqldump -u root –p123456  -no-data yiibaidb > D:\worksp\bakup\backup002.sql

僅備份數據庫數據:

有一種情況,您希望在分段和開發系統中刷新數據,因此這些系統中的數據與生產系統相同。

在這種情況下,只需要從生產系統導出數據,並將其導入到臨時或開發系統中。要實現只備份數據。

可以使用mysqldump的選項-no-create-info:

mysqldump -u [username] –p[password] –no-create-info [database_name] > [dump_file.sql]

實例:
mysqldump –u root –p123456 –no-create-info yiibaidb > D:\worksp\bakup\backup003.sql

多個數據庫備份到一個文件夾:

如果要通過[database_name]中的命令來備份多個數據庫,只需單獨的數據庫名稱即可。
mysqldump -u [username] –p[password]  [dbname1,dbname2,…] > [all_dbs_dump_file.sql]

如果要備份數據庫服務器中的所有數據庫,請使用選項-all-database。
mysqldump -u [username] –p[password] –all-database > [all_dbs_dump_file.sql]

MySQL-DELECT語句

功能介紹:從表中刪除數據。

MySQL-DELECT語法:

DELETE FROM table_name
WHERE condition;

第一,指定刪除數據的表(table_name)。

第二,使用條件來指定要在WHERE子句中刪除的行記錄。如果行匹配條件,這些行記錄將被刪除。如果省略WHERE子句,DELETE語句將刪除表中的所有行

MySQL-DELECT和LIMIT

如果要限制要刪除的行數,則配合Order By使用LIMIT子句。
DELETE FROM table_name
ORDER BY c1, c2, ...
LIMIT row_count;


MySQL-ON DELETE CASCADE語句

功能介紹:ON DELETE CASCADE對於外鍵的引用操作,可以實現在從父表中刪除數據時自動刪除子表中的數據。

外鍵:

如果公共關鍵字在一個關系中是主關鍵字,那麽這個公共關鍵字被稱為另一個關系的外鍵。

學生(學號,姓名,性別,專業號,年齡,班長)關系中,“學號”是主鍵,“班長”屬性表示該學生所在班級的班長的學號,它引用了本關系中“學號”屬性,因此“班長”是外鍵。

假設有兩張表:建築物(buildings)和房間(rooms)。

該數據庫模型中,每個建築物都有一個或多個房間。 然而,每個房間只屬於一個建築物。沒有建築物則房間是不會存在的。

技術分享圖片

第一步, 創建buildings表,如下創建語句:

USE testdb;
CREATE TABLE buildings (
    building_no INT PRIMARY KEY AUTO_INCREMENT,
    building_name VARCHAR(255) NOT NULL,
    address VARCHAR(255) NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

第二步, 創建rooms表,如下創建語句:

USE testdb;
CREATE TABLE rooms (
    room_no INT PRIMARY KEY AUTO_INCREMENT,
    room_name VARCHAR(255) NOT NULL,
    building_no INT NOT NULL,
    FOREIGN KEY (building_no)
        REFERENCES buildings (building_no)
        ON DELETE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

註意:在外鍵約束定義的末尾添加ON DELETE CASCADE子句。

第三步, 將一些數據插入到buildings表,如下插入語句:

INSERT INTO buildings(building_name,address)
VALUES(海南大廈,海口市國興大道1234號),
      (萬達水城,海口市大同路1200號);

第四步, 將一些數據插入到rooms表,如下插入語句:

INSERT INTO rooms(room_name,building_no)
VALUES(Amazon,1),
      (War Room,1),
      (Office of CEO,1),
      (Marketing,2),
      (Showroom,2);

第五步, 刪除編號為2的建築物:

DELETE FROM buildings WHERE building_no = 2;

查找受MySQL ON DELETE CASCADE操作影響的表的技巧

  用示例數據庫(testdb,因為上面兩個表是建立在testdb數據庫之上的)中的CASCADE刪除規則查找與建築表相關聯的表。

USE information_schema;

SELECT 
    table_name
FROM
    referential_constraints
WHERE
    constraint_schema = testdb
        AND referenced_table_name = buildings
        AND delete_rule = CASCADE


MySQL-DELECT JOIN語句

功能介紹:來從多個表中刪除數據。

MySQL允許DELETE語句中使用INNER JOIN子句來從表中刪除和另一個表中的匹配的行記錄。

從符合指定條件的T1T2表中刪除行記錄

實例:從符合指定條件的T1和T2表中刪除行記錄

DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key    #T1.key = T2.key指定了將被刪除的T1T2表之間的匹配行記錄的條件。
WHERE condition              #WHERE子句中的條件確定T1T2表中要被刪除的行記錄。

MySQL DELETE與INNER JOIN子句

對關聯其他表進行刪除

技術分享圖片

使用DELETE ... INNER JOIN語句刪除t2表中的ref=1的行記錄:

DELETE t1 , t2 FROM t1
        INNER JOIN
    t2 ON t2.ref = t1.id 
WHERE
    t1.id = 1;

MySQL DELETE與LEFT JOIN子句

DELETE語句中使用LEFT JOIN子句刪除表(左表)中沒有與其他表(右表)中的匹配的行記錄。

技術分享圖片

第一步:使用DELETE語句與LEFT JOIN子句來清理客戶數據。

DELETE customers 
FROM customers
        LEFT JOIN
    orders ON customers.customerNumber = orders.customerNumber 
WHERE
    orderNumber IS NULL;

第二步:通過查詢沒有任何訂單的客戶,使用以下查詢來驗證刪除:

SELECT 
    c.customerNumber, 
    c.customerName, 
    orderNumber
FROM
    customers c
        LEFT JOIN
    orders o ON c.customerNumber = o.customerNumber
WHERE
    orderNumber IS NULL;

MySQL-刪除數據(DELECT)