视图给我个人直观的感受就是某个表或者某些表的一部分,如果后面对某些表的修改,也会影响到视图,试图是被迫收到影响,代表了某些表的某些字段的内容,主要作用是起到一个筛选的作用,防止某些人看到某些东西。降低了sql 的复杂度。
目录
1.创建视图并查询,以及更新,删除。
表的内容:
创建一个视图:
CREATE VIEW vw_gays_info_nat AS SELECT NAME
,
address,
tel
FROM
gays
INNER JOIN info ON gays.id = info.id;
创建一个名字为vw_gays_info_nat的视图,这个视图所包含的字段是gays这张表里的name,address,tel,还有一个附加的条件是gays表与info表的相等的id在gays表里的内容都会显示在视图里,既保留了部分隐私数据,以后查询的时候也不用写sql语句了,直接在视图里查询就可以了;给人的感觉有点像自定义的表,类似于对象的感觉。
查询视图的所有内容:
select * from vm_gays_info_nat;
在终端输入指令:
show tables;
结果返回是包含视图的,所以说试图也是表的一种。也可以用show create view vm_gays_info_nat; desc vm_gays_info_nat;
更新视图: ---修改一下试图要查询什么东西。
alter VIEW vw_gays_info_nat AS SELECT NAME from gays;
原先是查3个,现在是查1个。
删除视图:
drop VIEW vw_gays_info_nat;
2.事务的相关操作
事务的4个特性acid;
atomicity
consistency
isolation
durability
当购买的时候没有付款,或者转账的时候最后没有点确定,没有视图的话就只能在买家和卖家的数据表里更新一下。
开启事务:
start transaction;
看一下info表的结构:
把每个人的年龄都减一岁,
update info set age=age-1;
执行完以后反悔了。。。。。。使用回滚,返回到执行前。
rollback;
如果不反悔,执行的话:
commit;
一旦commit了,就不可以rollback了。。commit之前可以任意rollback
也可以设置回滚点,回滚到之前什么的状态,如果不设置,直接回滚到原点;
还是info这张表。加一条内容并设置回滚点p1:
再加入一条数据并设置回滚点p2.
insert into info values(null, 'make', 54);
savepoint p2;
现在后悔了想回滚到,p1:
rollback to p1;
3.索引相关操作
设置索引,查询的时候块,添加的时候慢。
创建索引:
设置唯一索引:
create unique index info_age on info(age);
添加索引:
alter table info add index info_age info(age);
删除索引:
drop index info_age on info;
4.存储过程
delimiter //
运行完上述语句,SQL不以;结尾了,而是以//为结尾。。
恢复的时候同样的delimiter ;就可以了。
创建存储过程:create procedure 名字()
begin
end
delimiter //
create procedure proc_1()
begin
update info set age=age+1;
update gays set name='hah' where id=1;
end //
调用的时候:
delimiter ;
call proc_1();
删除存储过程
drop procedure proc_1;
展示存储过程
show create procedure proc_1;
show create status /G; //显示所有的