mysql高级

简介
实体与实体之间有3种对应关系,这些关系也需要存储下来
视图用于完成查询语句的封装
事务可以保证复杂的增删改操作有效
当数据巨大时,为了提高查询速度可以通过索引实现


建立关系表
建立一个scores 的表,里面存分数,stuid在students 的表中,subid在subject的表中
create table scores(
id int auto_increment primary key not null,
score decimal(4,1),
stuid int,
subid int,
foreign key(stuid) references students(id),
foreign key(subid) references subjects(id));


外键的级联操作
在删除students表的数据时,如果这个ID值在scores中已经存在,则会抛异常
推荐使用逻辑删除,还可以解决这个问题
可以创建表时指定级联操作,也可以在创建表后再修改外键的级联操作


级联操作的类型包括:
1、restrict(限制):默认值,抛异常
2、cascade(级联):如果主表的记录删掉,则从表中相关联的记录都将被删除
3、set null:将外键设置为空
4、no action:什么都不做




students.name,subjects.title,scores.score
查询的结果在三张表里面,两两有关系,就通过下面的语句把它们链接起来
select students.name,subjects.title,scores.score
from scores
inner join students on scores.stuid=students.id
inner join subjects on scores.subid=subjects.id;


连接查询分类如下:
1、表A inner join 表B:表A与表B匹配的行会出现在结果中
2、表A left join 表B:表A与表B匹配的行会出现在结果中,外加表A中独有的数据,未对应的数据使用null填充
3、表A right join 表B:表A与表B匹配的行会出现在结果中,外加表B中独有的数据,未对应的数据使用null填充
在查询或条件中推荐使用“表名.列名”的语法
如果多个表中列名不重复可以省略“表名.”部分
如果表的名称太长,可以在表名后面使用‘as 简写名’或‘简写名’,为表起个临时的简写名称


事务语句
1、开启begin;
2、提交commit;
3、回滚rollback;


使用事务的情况:当数据被更改时,包括insert、uodate、delete


查询时,确定的值放前面,范围放后面











































































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值