数据库备份介绍:
数据库一旦删除数据,它就会永远消失。 因此,在执行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;