视图(view):是一种有结构,但是没结果的虚拟表
创建视图
基本语法:create view 视图名字 as select 语句;
创建单表视图:基表只有一个
创建多表视图:基表来源至少两个
查看视图
show tables [like] / desc 视图名 / show create table 视图名;
修改视图
alter view 视图名字 as 新的select语句;
删除视图
drop view 视图名字;
视图数据操作
新增数据
多表视图不能新增数据
可以向单表视图插入数据,但是视图中包含的字段必须有基表中所有不能为空、或没有默认值的字段
视图是可以向基表插入数据的
删除数据
多表视图不能删除数据
单表视图可以删除数据
更新数据
更新限制:with check option;
多表视图不能更新数据
视图算法
视图算法:系统对视图以及外部查询视图的select语句的一种解析方式
视图算法分三种
undefined:未定义(默认的)
temptable:临时表算法
merge:合并算法
算法指定:在创建视图的时候create algorithm=指定算法 view 视图名字 as select语句;
数据备份与还原
方式:
数据表备份
单表数据备份
SQL备份
增量备份
数据表备份
存储引擎:innodb、myisam
innodb:只有表结构,数据全部存储到 ibdata1 文件中
myisam:表、数据和索引全部单独分开存储
单表数据备份
备份:select */字段列表 into outfile 文件所在路径 from 数据源;
高级备份:select */字段列表 into outfile 文件所在路径 fields 字段处理 lines 行处理 from 数据源;
fields:字段处理,enclosed by(默认'')、terminated by(默认'\t')、escaped by(默认'\\')
lines:行处理,starting by(默认'')、terminated by(默认'\r\n')
单表数据备份
数据还原:
load data infile 文件所在路径
into table 表名[(字段列表)]
fields 字段处理
lines 行处理;
SQL备份
备份:mysqldump.exe
mysqldump/mysqldump.exe -hPup 数据库名字 [数据表名字1 [数据表名字2...]] > 外部文件路径
整库备份:
mysqldump/mysqldump.exe -hPup 数据库名字 > 外部文件路径
SQL还原数据
方案一:使用mysql.exe客户端还原
mysql.exe/mysql -hPup 数据库名字 < 备份文件目录
方案二:使用SQL指令还原
source 备份文件所在路径
增量备份
备份的是系统日志文件
代码:
-- 创建视图;单表 + 多表
create view my_v1as
select * from my_student;
create view my_v2as
select * from my_class;
create view my_v3as
select * from my_studentas s
left join my_classas c on s.c_id=c.id; -- id重复
-- 多表视图
create view my_v3as
select s.*,c.c_name,c.roomfrom
my_studentas s
left join my_classas c
on s.c_id=c.id;
-- 查看视图创建语句
showcreate view my_v3\G -- \G 横向查看
-- 视图使用
select * from my_v1;
select * from my_v2;
select * from my_v3;
-- 修改视图
alter view my_v1as
select id,name,sex,age,height,c_id
from my_student;
-- 创建视图
create view my_v4as select * from my_student;
-- 删除视图
drop view my_v4;
-- 多表视图插入数据
insert into my_v3
values(null,'bc20190006','张三丰','男',
150,180,1,'python1907','B407');
-- 将学生表的学号字段设置成不允许为空
alter table my_student modify
number char(10)not null unique;
-- 单表视图插入数据;视图不包含所欲不允许为空的字段
insert into my_v1
values(null,'张三丰',150,'男',180,1); -- 插入失败(学号不允许为空)
-- 单表视图插入数据
insert into my_v2
values(2,'python1811','B410');
-- 多表视图删除数据
delete from my_v3where id=1;
-- 单表视图删除数据
delete from my_v2where id=4;
-- 多表视图更新数据
update my_v3set c_id=3 where id=5;
-- 视图;age子弹限制更新
create view my_v4as
select * from my_studentwhere
age>30 with check option; -- 表示视图的数据来源都是年龄大于30岁,
是由where age>30 决定的
-- with check
-- option 决定通过视图更新的时候,不能将已经得到的数据age>30的改成<30的
-- 将视图可以查到的数据该成年龄小于30
update my_v4set age=29 where id=3;
-- 可以修改数据;可以改;但是视图查不到
update my_v4set age=32 where id=2;
-- 获取所有班级中最高的一个学生
create view my_v5as
select * from my_studentorder by
heightdesc ;
select * from my_v5group by c_id;
select * from my_studentgroup by c_id
order by heightdesc;
-- 指定算法为临时表算法
create algorithm=temptableview
my_v6as select * from my_student
order by heightdesc ;
select * from my_v6group by c_id;
-- 查看MySQL的版本
select @@version;
-- 创建myisam表
create table my_myisam(
idint
) charset utf8 engine=myisam;
-- 向my_myisam表插入几条记录
insert into my_myisamvalues (1),(2),(3);
-- 单表的数据备份--
-- ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
-- show variables like '%secure%';
-- 找到secure_file_priv | C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
-- 打开my文件,ctrl+f找到关键字secure,修改原路径:
-- 把原路径用#注释掉,改为:
-- secure-file-priv=""
-- 需要重启MySQL服务并重新登录认证
select * into outfile
'D:\t\我的文档\19071\web2/student.txt' from my_student;
-- select * into outfile
-- 'D:\t\我的文档\19071\web2/class.txt' from my_class;
-- 字段处理
fileds
enslosedby '"' -- 数据使用双引号包裹
terminatedby '|' -- 使用竖线分割字段数据
-- 行处理
lines
startingby 'START:'
from my_class;
delete from my_class;
-- 还换数据
loaddata infile
-- 文件所在路径
'D:\t\我的文档\19071\web2/student.txt'
into table my_class -- 表名[(字段列表)]
-- 字段处理
fieds
enclosedby '"' -- 数据使用双引号包裹
terminatedby '|' -- 使用竖线分割字段数据
-- 行处理
lines
startingby 'START:';
-- SQL备份
mysqldump -uroot -p123456
mydatabase my_student > D:/t/我的文档/19071/web2/student.sql
-- 整库备份
mysqldump -uroot -p123456
mydatabase > D:/t/我的文档/19071/web2/mydatabase.sql
-- 还原数据;mysql客户端还原
mysql -uroot -p123456 mydatabase
< D:/t/我的文档/19071/web2/student.sql
-- SQL指令还原SQL备份
source D:/t/我的文档/19071/web2/student.sql;