目录
创建视图:create view tmp as select * from student_info where age = 25;
表连接:
union:
结果合并,同一张表union的结果通常可以使用or完成,可以多张表的查询结果合并,查询结果的列名以第一次sql语句的结果列为准。
要求:
两次查询的列数量一致即可。
建议:
查询的列类型也一样:
注意1:此种方式取出的结果集中有完全相同的列和值,直接合并成一行(去重复)。
解决方法:使用union all
注意2:如果子句中有order by 及 limit这些必须要用括号括起来,并且必须要和limit连用,不然结果可能出现问题。
笛卡尔积:
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
所以,两张表连接相当于两张表相乘。 select * from a,b 结果为两张表的元素的乘机。
表连接:join
左连接(left join):左表为准,到右表中找匹配的数据,如果找到就拿出来,找不到就用null补齐。
右连接(right join):右表为准,到左表中找匹配的数据,如果找到就拿出来,找不到用null补齐,左右连接可以相互转化。
内连接(inner join):内连接是左右连接的交集。
视图:
视图是由查询结果形成的一张虚拟表。
视图是对若干张基本表的引用,一张虚拟表,查询语句的执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变);
可以跟基本表一样,进行增删改查,但是增删改操作有条件限制;
创建视图:create view tmp as select * from student_info where age = 25;
查看视图结构:desc tmp;
show create table tmp;
删除视图:drop view tmp;
对视图的修改必须满足:
1、视图的数据和表一一对应时可以修改
2、视图必须包含表中所没有默认值的列
SQL执行顺序,执行计划
其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序
与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行:
from--where--group by--having--select--order by
from:需要从哪个数据表检索数据
where:过滤表中数据的条件
group by:如何将上面过滤出的数据分组
having:对上面已经分组的数据进行过滤的条件
select:查看结果集中的哪个列,或列的计算结果
order by:按照什么样的顺序来查看返回的数据
执行计划:expain select * .....
事务和锁:
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。 事务处理可以用来维护数据库的完整性,保证成 批的 SQL 语句要么全部执行,要么全部不执行。 事务用来管理 insert,update,delete 语句
锁是计算机协调多个进程或线程并发访问某一资源的机制。
mysql中如果数据量大,并发访问多或者读写冲突,会出现死锁。表被锁住,不允许操作。