上个文章我们说了交叉链接和自然链接(会出现导致数据缺失,解决方法就是我们下面说的外连接)外链接没有说完,今天我们就接着上个的继续说
外链接
外链接:分为左外链接和右外链接
左外链接:
显示结果以左表为准
左表中的数据会全部出现,右表中的数据,有就显示,没有就显示为空
格式:
select * from 左表 left join 右表 on 左表.字段=右表.字段
右外链接:
显示结果以右表为准
右表中的数据会全部出现,左表中的数据,有就显示,没有的就显示为空
格式:
select * from 左表 right join 右表 on 左表.字段=右表.字段
给字段和表名起别名:
格式:
#字段:
select 字段名 as 新名字 from 表名....
#表:
select 字段名 from 表名 as 新名字....
#注意:字段起了别名后只是在表里面修改了后面不可以用新名字
#表起了别名后面条件就必须用新的名字,不然就会报错
数据库设计方法
·ER模型:表和表的关联关系
概念:
主键:是用于在表中唯一的标识一个字段
外键:外键就是另一个表的主键,通过使用外键,就可以将两个表关联起来
关系的类型:一对一、一对多、多对多
foreign key(本表的外键) references 另一个表名(该表的主键)
例如:
foreign key(classid) references tb2(classid)给classid字段转换成外键,指向tb2表的classid这个字段这个写在创建表里
视图(view)
视图是什么?
视图可以认为成是一张表
但是这表存在内存中的虚表,断电后会消失
作用:通过视图,可以让用户只能访问数据库中一部分数据(要给那个用户授权这个表)
格式:
create view 视图名 as select 语句
例如:
给jerry用户授权只能看到students表中的stuid小于10的数据
#先创建一个视图
create view new1 as select * from students where stuid<10
#给jerry用户授权指定数据
grant all on hellodb.new1 to "jerry"@"localhost" identified by "123"
存储过程:
作用:快速向数据库写入大量的测试数据
定义储存过程的格式:
delimiter // #存储过程的开头,定义一个符号
create procedure 存储过程名() #定义存储过程的名字
begin #开始储存过程
sql语句
end // #定义结束
delimiter
调用/使用存储过程:
call 存储过程名()
案例:
delimiter // #定义开头
create procedure m1() #创建存储过程,m1
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=i+1; #将i的值加1
end while; #结束循环
end // #定义结束
delimiter;
call m1() #调用存储过程
事物:
将多个sql语句组合成一个整体,这个整体就是一个事物
事物中的所有语句是要么都执行,要么都不执行
事物中的语句,如果只有部分执行成功,那么就需要将这个事物进行回滚操作
回滚:就是将数据恢复到执行之前的状态(但是提交后就不可以恢复到之前了)
通过使用事物,可以保证数据的一致性
事物的操作:提交事物、回滚事物
提交事物:
让事物中的sql语句,真正的生效
如果使用了事物,那么在事务提交之前,其他用户是看不到事物中的操作的
操作的命令格式:
begin #启动事物
commit #提交事物,提交之后,事物自动结束
rollback #回滚事物,回滚之后,事物自动结束
案例:
begin #启动事物
insert into 表名 values(1) #插入数据
commit #提交事物
roollback #回滚事物
一条条执行,当执行插入数据后表中是没有的但是用命令查看是可以看到的,执行回滚事物后就看不到了,当执行提交后就都可以看到了。