数据库(七.外键,视图,事务)

外键

  1. 什么是外键?
    简单来说一个表的主键出现在另外一个表中,那么对于另外一个表来说,这个字段就是外键.

  2. 为什么要有外键?
    保持数据一致性,完整性,起到对表间的数据插入,更新的时候的一种约束.在数据量大的时候外键会影响效率,因此视情况使用.

比如:两张表students 和 classes分别存储学生和班级的信息,当在学生表中插入一条新的学生记录时,指定了一个不存在的班级,那这条记录是垃圾数据,在没有外键约束的情况下是能插入成功的,同时在多客户端操作数据库时会引发更多问题. 这时将students表的cls_id 对应 classes的id添加为外键,这时再插入学生信息就会检查指定的班级是否存在于classes表中,存在才能插入成功.

创建外键

  • 已经存在的表建立外键:
  • 对于已经存在的表创建外键时,表中数据不符合外键约束将创建不成功.

    alter table 表名 add foreign key (当前表的字段) references 表名(字段)
  • 创建表的时候建立外键:

create table 表名 ( 字段信息,
foreign key (本表字段) references 外表(id),
foreign key (本表字段) references 外表(id)
);

添加外键失败

在这里插入图片描述

添加外键成功

在这里插入图片描述

外键约束插入数据

在这里插入图片描述

外键可以创建多个,关联多张表,修改数据时会检查所有的约束.查看当前拥有的外键.

在这里插入图片描述

删除外键

  • 查看外键名称:show create table 表名;
  • alter table 表名 drop foreign key 外键名;

在这里插入图片描述

视图

有这样一个问题:

  1. 当数据库中的表多起来,表之间的关系复杂起来,这时要连接查询分布在多个表的数据会写很长的SQL语句,每次用到都要写一遍岂不是很麻烦.
  2. 这时可以把当前连接情况结果记录为一个虚拟表,仅供查询显示数据使用.称之为视图.(视图不能修改数据,仅用于查看,在数据庞大时可能出现异常,视情况使用).

创建视图

create view 视图名 as select .....
一般视图名以 v_开头.

在这里插入图片描述
在这里插入图片描述

删除视图

drop view 视图的名称;

在这里插入图片描述

事务

什么是事务?

  1. 概念:事务Transaction,是指作为一个基本工作单元执行的一系列SQL语句的操作,要么全成功,要么全失败.
  2. 作用:事务用来管理 insert,update,delete 语句.
  3. 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务.
  4. 对于多个SQL用来完成一件事情的操作,操作中途发生异常,事故等,导致没有达到预期目的,已经执行过的部分SQL语句对数据库的操作不该存在,应当将数据库恢复至操作开始前的状态.MySQL的事务用来管理这一点.

事务的特性ACID:

原子性

一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节.事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样.

一致性

在事务开始之前和事务结束以后,数据库的完整性没有被破坏.这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度,串联性以及后续数据库可以自发性地完成预定的工作.

隔离性

数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致.

持久性

事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失.

事务的使用

步骤:

  • 开启事务

    begin;

  • 操作数据库

    insert update delete

  • 确认修改

    commit;

  • 回滚

    rollback;

只有数据库引擎是InnoDB才支持事务.

在这里插入图片描述

事务操作

在这里插入图片描述
在这里插入图片描述

多客户端之间
再打开一个数据库客户端

在这里插入图片描述
在这里插入图片描述

一个客户端开启事务并对表进行修改操作,在没有commit之前,其他客户端无法对同一个表进行修改操作,会阻塞.

在这里插入图片描述
在这里插入图片描述
如有错误还望指出

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值