技能:导入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);

mysqldump where mysqldump where子查询_mysqldump where

 

  • 列级子查询:子查询的结果是一列(可以包含多行)
  • 通常是和in关键字配合使用

查询学生表中,id号为1的学生的班级信息!

1.主查询:查询的是班级信息

2.子查询:在学生表中出现的班级id

select * from class where class_id in (select class_id from student);

  

mysqldump where mysqldump where子查询_子查询_02

 

  • 行级子查询:子查询的结果是一行(可以包含多列)

   如果有:查询年龄最大,并且分数最高的人的信息;

  行级子查询必须构造一个行元素,由多个列组成的元素就是行元素

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子查询,

mysqldump where mysqldump where子查询_mysql_03

 

要求:查询出每个班级mark最高的人的信息:步骤:

1先让mark倒序排序,

select * from student order by mark desc;

mysqldump where mysqldump where子查询_mysqldump where_04

2.对班级进行分组://

select * from(select * from student order by mark desc ) group by class_id;//错误的

.

mysqldump where mysqldump where子查询_mysqldump where_05

select * from(select * from student order by mark desc )  as temp group by class_id;//作为数据源的衍生表必须有别名,因为后面的语句完全有可能再次使用到临时表中的列!!

 

mysqldump where mysqldump where子查询_子查询_06

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倒序排列;

mysqldump where mysqldump where子查询_子查询_07

三、exits子查询:

根据exits后面的查询结构判断是否显示当前记录

查询有雪神的班级的信息:

主查询表:class

判断class表中class_id列的值是否在学生表中出现过!

select * from class c where exists ( select * from student,class where student.class_id = c.class_id);

 

mysqldump where mysqldump where子查询_mysqldump where_08

 

 四、特殊关键字:主要针对的是列级子查询

查询有学生的班级信息

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结果一致。

mysqldump where mysqldump where子查询_mysqldump where_09

 

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;

权限管理:

 

外键管理: 

  

---恢复内容结束---