數據庫備份介紹:
數據庫一旦刪除數據,它就會永遠消失。 因此,在執行DELETE
語句之前,應該先備份數據庫,以防萬一要找回刪除過的數據。
MySQL提供了非常有用的工具,用於在服務器上本地備份或轉儲MySQL數據庫。
MySQLDump是由MySQL提供的程序,可用於轉儲數據庫以備數據庫或將數據庫傳輸到另一個數據庫服務器。
轉儲文件包含一組用於創建數據庫對象的SQL語句。 此外,mysqldump
可用於生成CSV,分隔符或XML文件。
數據庫備份操作:
要備份MySQL數據庫,數據庫首先必須存在於數據庫服務器中,並且您也可以訪問該服務器。 如果沒有遠程桌面,可以使用SSH或Telnet登錄到遠程服務器。
數據庫備份 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
子句來從表中刪除和另一個表中的匹配的行記錄。
從符合指定條件的T1
和T2
表中刪除行記錄
實例:從符合指定條件的T1和T2表中刪除行記錄 DELETE T1, T2 FROM T1 INNER JOIN T2 ON T1.key = T2.key #T1.key = T2.key
指定了將被刪除的T1
和T2
表之間的匹配行記錄的條件。 WHERE condition #WHERE
子句中的條件確定T1
和T2
表中要被刪除的行記錄。
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;