Mysql学习笔记(五:子查询与高级用法)

九、子查询

1、子查询基本语法

select * from 表名1 where 字段1 in (select 字段2 from 表名2 where 字段名+限制条件); 当括号内的数据只有一条时可以使用=,数据有多条时用in,一般情况下括号内的查询结果我们要一个字段的数据,即字段2处只填一个字段名

select * from 表名1 where 字段1 not in (select 字段2 from 表名2 where 字段名+限制条件);

2、exists和not exists

select *(某字段) from 表名1 where exists (select 字段2 from 表名2 where 字段名+限制条件); 当括号内的查询结果存在时,显示表1全部(某字段)内容

select * from 表名1 where not exists (select 字段2 from 表名2 where 字段名+限制条件);

十、高级用法

1、视图(view)

视图只能用来查看,不能增删改

1.1、view视图创建、使用、作用

视图的作用就是限制,限制你能看到那些东西,保护了敏感重要数据的隐私。

create view 视图名 as select ... from ... ...; 创建视图 (视图的内容就是as后面select语句查询到的数据,as后面可以跟任何select查询语句,即七、八、九部分的所有select语句,但是在视图中使用子查询时要注意视图算法的选择)

select * from 视图名; 查看创建的视图

show tables; 查看当前数据库下的表和视图(我们一般在创建视图时用下划线命名法加前缀ve_来区分表和视图)

desc 视图名/表名; 查看表或视图的结构

show create view 视图名/表名; 查看创建表或视图的SQL语句

show table ststus where comment='view' \G; 一种高B格的查询视图的方法

1.2、更新和删除视图

alter view 视图1 as select ... from ... ...; 更改名为视图1的视图的内容为as后面select语句查询到的数据

drop view 视图名; 删除视图

1.3、视图算法tempptable,merge

在视图当中使用子查询时,要注意修改视图算法

create algorithm=视图算法 view 视图名 as select ... from ... ...;

视图算法有2个,tempptable临时表算法(常用)和merge合并算法。创建视图时若不专门指定视图算法,默认为undefined即未定义的。

2、事务(transaction)

事务就相当于是在淘宝上买东西付款一样,有一个中间过渡的东西。只有在确认收货之后才会给卖家打钱,如果退货了卖家就收不到钱。也可以类比银行转账,经过双方都确认之后,确认要转,才会转钱。操作中间这个过度的过程称之为事务。

只有数据库的引擎为innodb的时候才能使用事务

2.1、transaction

start transaction; 开启事务

开启事务之后可以进行create,drop,alter,insert,delete,update...任何操作

update 表1 set 某字段=某字段进行加减等操作 where 字段1=要更新的那组数据对应的字段1的值; 对表1某组数据的某字段进行...的更新

commit; 提交(提交之后改变生效)

rollback; 回滚(退出事务且改变不生效,相当于撤销)(回滚操作只能在commit提交之前做,一旦提交就不能回滚)

2.2、rollback to回滚点

回滚点就类似于虚拟机里快照的功能

savepoint 回滚点名;

rollback to 回滚点名;(回滚操作只能在commit提交之前做,一旦提交就不能回滚)

2.3、ACID

事务的四大特性ACID

auomicity 原子性

consistency 一致性

lsolation 隔离性

durability 持久性

3、索引(index )

设置索引后会加快查找的速度方便查找,但是增删改的速度会变慢,且索引较为占用空间

四种索引:主键索引,唯一键索引,普通索引,全局索引

create index 索引名 on 表名(字段名); 普通索引

create unique index 索引名 on 表名(字段名); 唯一键索引

create primary key index 索引名 on 表名(字段名); 主键索引

alter、drop...... 修改、删除索引

4、存储过程(procedure)

存储过程就相当于自定义一个SQL语句的函数,在自己要用的时候直接调用这个函数就可以

4.1、delimiter

delimiter //; 设置SQL语句以//结尾(默认是以;为SQL语句的结尾)

4.2、procedure

写一个存储过程:(先设置SQL语句以//结尾,再写)

create procedure 函数名()

begin

想要执行的SQL语句;

end //

存储过程中也可以嵌套事务

call 函数名(); 调用存储过程(函数)

drop procedure 函数名; 删除存储过程(函数)

show create procedure 函数名; 查看创建存储过程(函数)的SQL语句

show procedure status \G 显示数据库所有的存储过程(函数)

结束语 

    当你看到这里,专栏MySQL学习笔记也就完结了。以上全部就是MySQL学习中我所记录的笔记,这些仅仅是MySQL最基础的一些操作,要是能把这些笔记全部掌握的话,完成实习问题不大。如果想要成为专业的DBA,那么这些是远远不够的。希望我的分享能对大家学习MySQL有帮助。

本专栏共5篇博客,如需转载或引用请联系本人,注明出处即可。

Mysql学习笔记(一:数据库和表的基本操作)_Shipmaster_23的博客-CSDN博客

Mysql学习笔记(二:数据操作与数据类型)_Shipmaster_23的博客-CSDN博客

Mysql学习笔记(三:列属性完整性和数据库设计思维)_Shipmaster_23的博客-CSDN博客

Mysql学习笔记(四:单表查询与多表查询)_Shipmaster_23的博客-CSDN博客

你可能感兴趣的:(MySQL学习笔记,mysql,学习,数据库)