ok了,续更来了
今天的内容:外链、子查询、视图、存储过程、事物
1.外链
外链分为左外和右外:
左外:
- 显示结果以左表为准
- 左表中的数据会全部出现,右表中的数据,有就显示,没有就显示为空
语法:
select * from 左表 left join 右表 on 左表.字段=右表.字段
右外:
- 显示结果以右表为准
- 右表中的数据会全部出现,左表中的数据,有就显示,没有的显示为空
语法:
select * from 左表 righr join 右表 on 左表.字段=右表.字段
案例:
#使用右链接查询两个表中的数据
select * from students right join classes on students.classid=classes.classid
2.子查询
在查询中,使用另外一个语句的查询结果
语法:
select * from 表名 where 条件=(select 语句)
案例:
select name,age from students where age=(select max(age) from students)
3.视图
视图:view
- 视图可以认为是一个表
- 但是这个表是存在于内存中的虚表,断电后就会消失
作用:
通过视图,可以让用户只能访问数据库中一部分数据(给用户授权)
格式:
create view 视图名 as select 语句
案例:
#创建视图
create view new1 as select * from students where stuid<10
#授权给用户指定的数据
grant all on hellodb.new1 to "tom"@"localhost" identified by "123456"
4.存储过程
存储过程可以快速的向数据库中插入大量测试数据库
格式:
delimiter// #存储过程的开头,定义一个符号
cerate procedure 存储过程名()
begin #开始存储过程
sql 语句
end// #定义结束
案例:
dilimiter // #定义开头
create procedure my() #创建存储过程名为my
begin #开始存储过程
declare i int; #declare定义变量 i 类型为整形
set i = 0 ; #设置变量 i 为0
while i<100 do #当i<100时执行循环代码
insert into tb1(name) values(i); #向表中插入数据
set i = = + 1 ; #将i的值++
end while; #循环结束
end // #定义结束
delimiter;
call my() #调用名为my的存储过程
5.事物
- 将多个sql语句组合成一个整体,这个整体就是一个事物
- 事物中的所有的语句要么都执行,要么都不执行
- 事物中的语句,如果只有部分执行成功,那么就需要将这个事物进行回滚操作
- 回滚:将数据恢复到执行之前的状态
- 通过使用事物,可以保证数据的一致性
事物的操作
- 提交事物
- 回滚事物
提交事务
- 让事物中的sql语句,真正的生效
- 如果使用了事物,那么在事物提交之前,其他用户是看不到事物中的操作的
操作命令格式:
begin #启动事务
commit #提交事务,提交之后,事务自动结束
rollback #回滚事务,回滚之后,事务自动结束