MySql学习---数据库基本类型,事务,多表查询
-
数据库分类
关系型数据库
行列,
列如Mysql,oracle
通过表和表之间,行和列之间的关系进行数据的存储
非关系型数据库:
Redis,MongDb
以对象存储,同过对象的自身属性来决定表与表的关系
一对一,一对多,多对多
外键特点
从表外键的值是对主表主键的引⽤。
从表外键类型,必须与主表主键类型⼀致。
声明外键约束语法
alter table 从表 add [constraint][外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
SQL联合查询(内联,左联,右联,全联)
内联inner join,左联 left outer join,右联right outer join,全联,full outer join
建立临时表,
临时表只在当前链接可见,关闭连接时候,会自动删除并释放所有控件‘
此表可供你当次链接的操作里查询.
create temporary table 临时表名称
select 表字段名称 from 表名称
分页查询
limit 0,3: 从0开始查,查三条
约束:对表中的数据进行限定从而保证数据的有效性和完整性。
分类:主键约束:primary key
非空约束:not Null
唯一约束:unique
外键约束:foreign key
非空约束:
自动增长:使用auto_increment,可以来完成值的自动增长
添加主键约束并且完成,主键的自动增长。
多表之间的关系
一对一
一对多
多对多
数据库设计的范式
概念:设计数据库时候,需要遵循的一次要求
第一范式:每一列都是不可分割的原子数据项
第二范式:第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
第三范式:需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。
内连接查询
查询员工表的名称,性别,部门表的名称
select
t1.name,--员工表姓名
t1.sex,
t2.name--部门表的姓名
from empt1,dept t2
where
t1.deptid = t2.id
显示内连接
-
语法:select 字段列表 from 表1 inner join 表2 on 条件
外连接查询
左外连接
语法:select 字段列表 from 表1 left join 表2 on 条件
查询的是左表所有的所有数据以及其交集部分
右外连接:
语法:select 字段列表 from 表1 left join 表2 on 条件 查询的是左表所有的所有数据以及其交集部分
子查询
查询中嵌套查询,称之为子查询
子查询的不同情况
1.子查询的结果是单行单列
子查询可以作为条件,运用运算符去判断
2.子查询的结果是多行单列
子查询可以作为为条件,使用运算符in来判断
select * from emp where dep_id in(select id from dept where name = '财务部' or name = '市场部');
3.子查询的结果是多行多列
子查询可以作为一张虚拟表
事务
1.事务的基本介绍
1.概念:
如果一个包含多个步骤的业务操作,被事务管理,要么同时成功,要么失败
可以确保数据的操作安全
2.操作
1.开启事务:start transaction
2.事务回滚:rollbsck(事务出现问题就回滚)
3.事务提交:commit(事务没有问题就提交)
4.MySQL数据库中的事务是默认自动提交
一条DML(增删改)语句会自动提交一次事务
事务提交的两种方式,
1.自动提交
MySQL就是自动提交的
一条DML语句会自动提交一次事务
2.手动提交
需要先开启事务,再提交
*修改事务的默认提交方式
查看当前事务的默认提交方式:
select @@autocommit;--- 1代表自动提交,0代表手动提交
修改默认提交方式
set @@autocommit = 0/1
2.事务的四大特征:
1.原子性:是不可分割的最小操作单位;
2.持久性:如果事务一旦提交或者回滚之后数据库会发生持久化的保存数据
3.隔离性:多个事务之间,相互独立.
4.一致性:事务操作前后,数据总量不变.
事务的隔离级别:
概念:多个事务之间隔离的,相互独立的,但是如果多个事务操作同一批数据,则会英法一些问题,设置不同的隔离级别就可以解决问题.
存在问题:
1.脏读:一个事务,读取到另外一个事务中没有提交的数据
2.不可重复读(虚读):同一个事物中,两次读取到的数据不一样
3.幻读:一个事务操作数据表所有记录,另一个事务添加了一条数据,则第一个事务查询不到到自己的修改
隔离级别:
1.read uncommitted:读未提交
产生的问题:脏读,不可重复读,幻读
2.read committed:读已提交(Oracle)
产生的问题,脏读,不可重复读,幻读
3.repeatable read :可重复读(Mysql 默认)
产生的问题:幻读
4.serializable:串行化
可以解决所有问题
注意:隔离级别从小到大安全性越来越高,但是效率越来越低
今年面试时候被问到数据库事务是什么,一脸懵逼,重新补习一下
结合以上,数据库事务就是多个数据库表的操作被一个事务管理要么同时成功,要么同时失败。
数据库事务的四大特性:原子性(不可分割的最小操作单位),隔离性(事务之间相互独立),持久性(修改后就一直保存在磁盘当中),一致性(事务操作前后数据总量不变)