数据库关联查询
内连接查询(inner join)
SELECT * FROM tb1 INNER JOIN tb2 ON 条件
左表查询(左关联查询)(left join)
查询两个表共有的数据,和左表所有的数据,左表有右表没有的部分用null代替
SELECT * FROM tb1 LEFT JOIN tb2 ON 条件
右表查询(右关联查询)(right join)
查询两个表共有的数据,和右表表所有的数据,右表有左表没有的部分用null代替
SELECT * FROM tb1 RIGHT JOIN tb2 ON 条件
多表(三表)关联查询
1、内关联查询
select * from major inner join major_course inner join course where
major.id = major_course.major_id and major_course.course_id = course.id
and major.id= 1;
2、关联子查询
SELECT
name
FROM
major
WHERE
id IN (
SELECT
mc.major_id
FROM
course AS c
LEFT JOIN major_course AS mc ON c.id = mc.course_id
WHERE
c.id = 1
);
事务
创建新的数据库名为bank
create database bank;
在bank数据库中创建新的表名为user
create table user(
id int primary key,
name varchar(20),
money int);
往user表中添加数据
insert into user values(1,'a',1000);
查看是否添加成功
select * from user;
回滚(就是撤销sql语句执行的效果)
rollback;
验证sql的语句执行的效果是否撤销
select * from user;
如果想要让回滚有效的话需要关闭事务(关闭mysql的自动提交)
set @@autocommit=0;
select @@autocommit;
验证回滚:
a再插入一条数据
insert into user values(2,'b',1000);
b查看此时的user表
select * from user;
c回滚
rollback;
d查看
select * from user;
e
重复上述操作
f由于关闭了自动提交功能,现在手动提交
commit;
g再回滚查看表(显然回滚失效了)
【总结】
事务:
——自动提交:@@autocommit=1;
——手动提交:commit;
——回滚:rollback;
事务是以两种方式存在的:一是手动开启事务,二是默认(自动)开启事务
手动开启事务给我们提供了一个修改的机会,如果操作失败的话可以通过回滚,实现修改,如果操作成功可以手动提交(commit)增加数据的安全性
3、事务的四大特征
A 原子性:事务是最小的单位,不可以再进行分割了
C 一致性:事务要求同一事务中的sql语句,必须保证同时成功或者同时失败
I 隔离性:事务1与事务2之间具有隔离性(后面详解)
D 持久性:事务一旦结束(commit),就不可以返回(rollback)
4、事务的隔离性
(1)read uncommitted 读未提交的
(2)read committed 读已提交的
(3)repeatable read 可以重复读
(4)serializable 串行化