技能:导入sql数据包
先退出:\q,将back.sql存到一个指定文件夹,如c盘根目录:
mysqldump -uroot -proot mydb2 > back1.sql;// 利用mysqldump中,
1.新建一个数据库,名称随意// create database mydb2;
2.切换到新建的数据库// use mydb2;
3.使用如下命令将sql备份文件导入即可:
source c:/back1.sql
4.查看是否有21张表//show tables;
?语言和命令的区别
一、子查询:sub query
概念:一个查询语句中包含多个select语句,负责主要数据选择的是主查询,辅助主查询的查询,是子查询。
select * from class where 把学生表中的班级和查询出来。
分类:
根据子查询出现的位置:
where子查询,出现在where关键字之后,主要是提供判断条件的!!
from子查询:出现在from关键字之后,主要提供数据源的!
子查询是一个可以独立运行的查询
where子查询分类:
- 标量子查询:子查询的结果是一行一列的唯一值(可以没有结果)
查询学生表中,id号为1的学生的班级信息!
1.主查询:查询的是班级信息
2.子查询:学生表中id为1的班级id信息
select * from class where class_id = (select class_id from student where id =1);
- 列级子查询:子查询的结果是一列(可以包含多行)
- 通常是和in关键字配合使用
查询学生表中,id号为1的学生的班级信息!
1.主查询:查询的是班级信息
2.子查询:在学生表中出现的班级id
select * from class where class_id in (select class_id from student);
- 行级子查询:子查询的结果是一行(可以包含多列)
如果有:查询年龄最大,并且分数最高的人的信息;
行级子查询必须构造一个行元素,由多个列组成的元素就是行元素
age //不是行元素
(name,age)
(age,mark) = (最高年龄,最高分数)
select * from student where (age,mark) = (select max(age),max(mark) from student);
错误语法:
select * from student where age = max(age) and mark = max(mark);
select * from student having age = max(age) and mark = max(mark);//只有第一条记录就满足条件的情况下,会显示第一条结果,否则都是空!
原因使用了having,就是默认对整张表分组,只保留了第一条记录。
二、from 子查询:
用于from关键字之后的查询就是from子查询,
要求:查询出每个班级mark最高的人的信息:步骤:
1先让mark倒序排序,
select * from student order by mark desc;
2.对班级进行分组://
select * from(select * from student order by mark desc ) group by class_id;//错误的
.
select * from(select * from student order by mark desc ) as temp group by class_id;//作为数据源的衍生表必须有别名,因为后面的语句完全有可能再次使用到临时表中的列!!
3.让每个班级的最高成绩倒序显示
select * from(select * from student order by mark desc ) as temp group by class_id order by mark desc;//
说明:
括号里是从student表中取值,然后以mark列名降序排列,把这个出来的表命名为temp;
把temp这个表按照列名class_id来分组,并以列名mark倒序排列;
三、exits子查询:
根据exits后面的查询结构判断是否显示当前记录
查询有雪神的班级的信息:
主查询表:class
判断class表中class_id列的值是否在学生表中出现过!
select * from class c where exists ( select * from student,class where student.class_id = c.class_id);
四、特殊关键字:主要针对的是列级子查询
查询有学生的班级信息
1.主查询:班级表
2.子查询:在学生表中出现的班级id
select * from class where class_id in ( select class_id from student) ;
any :任意一个
select 1 = any(select class_id from student);
some:作用和any一样的;
肯定语意时,some和any一样的;否定语义时,用any替代some;
在否定时,=any和!=any结果一致。
all:匹配所有的结果
select * from class where class_id= all( select class_id from student) ;
查询没有学生的班级信息:
select * from class where class_id !=all( select class_id from student);//把班级中未被引用的表显示出来
select * from class where class_id <>all( select class_id from student);//把班级中未被引用的表显示出来
-- 类似in的其他条件关键字, 都必须带 = 号
student); -- 等于其中任意一个就保留
student); -- 等于其中一部分就保留
student); -- 等于其中所有的才保留
五、备份还原
备份的分类:
1.整库备份:
mysqldump命令,在命令行中执行,并不是登录到服务端之后再执行!
mysqldump.exe(可以省略.exe)
mysqldump - hPup 数据库名>文件地址
如:mysqldump -proot -uproot mydb2>c:/back1.sql
2.单表备份
mysqldump -hPup 数据库名 数据表名>文件地址
如:mysqldump -proot -uproot mydb2 student >c:/mydb2.student.sql
3.多表备份
mysqldump -hPup 数据库名 数据表名,数据表名,数据表名>文件地址
如:mysqldump -proot -uproot mydb2 student,class >c:/mydb2.student.sql
还原数据:
备份文件中只有表的信息,并没有库的信息。
所以还原是必须制定库才行
新库不一定非得和备份时的数据库一致
三种还原方式;
1.命令行中还原:
mysql -uroot -proot day29 <c :/myback1.sql
前提是库day29这哥库存在
2.登录mysqlzhih huany
sourse 备份的文件
3.手动还原不推荐。
手动打开备份文件(文本文件),复制所以的内容,粘贴到mysql命令行运行。
快速的创建一个和已经存在的表数据一致的表
create table temp as select * from student;
用户管理:
select count(*) from mysql.user;
权限管理:
外键管理:
---恢复内容结束---