mysql的级联操作CASADE

有了外键的关联,修改和删除比较麻烦,加入ON UPDATE CASADE和ON DELETE CASADE后当修改或者删除主表的数据,从表随之变化.

语法:

FOREIGN KEY (从表的关联字段名称)

REFERENCE 主表名称(主表关联的字段名称)

ON UPDATE CASADE

ON DELETE CASADE

通过sql 添加外键:

 alter table 表名 
    add CONSTRAINT 外键名称 FOREIGN KEY   从表的某个id
    REFERENCES  
    主表的某个字段(主键字段id)
    级联修改
    级联删除

多表关系:

一对一,多对一的关系 如一个人对应一个身份证
一对多的关系 如一个用户可以有多个订单
多对多的关系 如一个学生可以选择多门课程,一个课程也可以同时被多个学生选择

数据库的三大范式:

1NF:数据库表中的每一列不可在拆分的原子数据项,必须独立的列;
 2NF:在1NF基础上,一张表,描述一件事,数据库表中非主键字段必须完全依赖于主键字段,完全依赖是指不能存在仅依赖主键一部分的列。
3NF:在2NF基础上,任何非主列不得传递依赖于主键。 

多表查询:

分类:

1)内连接
        隐式内连接---看不到join关键字,使用where条件
        显示内连接---inner join 关键字
 2)外连接
        左外连接(推荐)
        右外连接
3)子查询:select 语句嵌套select语句,
          查询的效率比较低
          常用where条件使用比较运算符
          或者使用in集合语句
          或者使用一条select语句的结果作为一个"虚表"和其他表查询

注意:

如果使用这种语法 select 字段列表 from 表名1,表名2;会出现"笛卡尔乘积",原因:两张表是有关联关系,A表的记录数 *B表的记录数 = 总记录数.

内连接之隐式内连接 :select 字段列表 from 表名名1,表名名2 where  连接条件 ;

显示内连接:inner join 关键字 inner可以省略

语法:select 字段列表 from 表名名1 inner join 表名名2   on 连接条件; 

注:优先使用where

内连接查询时有一些关联值不相等的数据查找不到,可以使用左外和右外连接

左外连接:将左边表数据以及满足两种表条件的数据全部展示;
语法:select 字段列表 from 表名1  left outer join 表名2  on 连接条件  outer可以省略

数据库事务

事务:执行一系列操作的sql语句,要么同时执行成功,要么同时执行失败

①开启事务
start transaction;

② 执行业务操作
如果执行多个事务出现异常需要回滚到起始状态  rollback

③commit 提交事务

关系型数据库的特点:

原子性:使用事务管理的业务操作(执行多个sql),要么同时执行成功,要么同时失败

隔离性:业务和业务之间是独立,业务又需要被事务管理,事务和事务之间是独立的,相互之间不影响,分离开来!

持久性:针对增删改操作,只要提交事务,即使关机了,数据永久保存!

一致性:在事务管理的业务操作过程中,执行之前和执行之后它的数量总量不变

事务的隔离级别:

 mysql的默认隔离级别就是 repeatable read ;

mysql5.1以上查询事务的隔离级别 SELECT @@tx_isolation ; 

mysql8.0 查询事务隔离级别SELECT @@transaction_isolation ;

read uncommitted: 读未提交,会出现"脏读"问题,(一个事务可以读取另一个未提交事务的数据)

read committed: 解决了脏读问题,但会出现"不可重复读问题"(一个事务要等另一个事务提交后才能读取数据,在提交事务前和提交事务后读到的数据不一致)

repeatable read: 可重复读(mysql默认隔离级别) , 就是在开始读取数据(事务开启)时,不再允许修改操作 ,它解决了脏读和不可重复读会出现"幻读".

serializable : 序列化,或串行化,就是将每个事务按一定的顺序去执行,它将隔离问题全部解决, 级别最高,安全性最高,效率低!