什么是事务:

    1. TRANSACTION
    2. 是将一系列数据操作捆绑成为一个整体进行统一管理机制
    3. 多个操作作为一个整体向系统提交,要么都执行、要么都不执行
    4. 是一个不可分割的工作逻辑单元

    事务的特性:
    事务必须具备的属性,简称ACID 属性

    1. 原子性(Atomicity) :
      • 事务是一个完整的操作,事务的各步操作是不可分的(原子的),要么都执行,要么都不执行

    2.一致性 (Consistency)

    • 当事务完成时,数据必须处于一致状态

    3.隔离性(Isolation)

    • 并发事务之间彼此隔离、独立,不应以任何方式依赖于或影响其他事务

    4.持久性(Durability)

    • 事务完成后,它对数据库的修改被永久保持

    如何创建事务:

    • MySQL中支持事务的存储引擎
    • InnoDB支持事务操作
      • 通过UNDO日志和REDO日志实现对事务的支持
      • UNDO日志
        • 复制事务执行前的数据,用于在事务发生异常时回滚数据
    • REDO日志
      • 记录在事务执行中,每条对数据进行更新的操作
      • 当事务提交时,该内容将被刷新到磁盘
      • MyISAM不支持事务操作
    • 实现事务的方式
      • SQL语句
      • 设置自动提交关闭或开启

    开始事务:
    BEGIN ; 或
    提交事务:
    COMMIT ;
    回滚(撤销)事务:
    ROLLBACK ;
    示例:
    USE paycorp; /小王和小张的总账户余额和转账前保持一致,数据库中数据从一个一致性状态更新到另一个一致性状态/ /—开始事务(指定事务从此处开始,后续的SQL语句是一个整体—/ BEGIN;#事务的开始 /实现转账操作:小王向小张的账户上转4000元/ #小王的账户少4000元 UPDATE account SET balance=balance-4000 WHERE accountName=’小王’; /—由于账户余额不允许为负,撤销转账操作,恢复账户状态—/ ROLLBACK;
    自动关闭和开启事务:

    • 默认情况下,每条单独的SQL语句视为一个事务
    • 关闭默认提交状态后,可手动开启、关闭事务

    语法:
    关闭/开启自动提交状态
    SET autocommit = 0|1; 值为0:关闭自动提交
    注意:关闭自动提交后,从下一条SQL语句开始将会开启新事务,需使用COMMIT或
    ROLLBACK语句结束该事务
    示例:
    /通过设置autocommit=0开启事务操作,实现需求/ /小王向小张的账户转账2000,操作成功/ /小王再向小张的账户转账4000,为避免账户余额为负,撤销此操作/ USE paycorp; SET autocommit = 0; /关闭自动提交,开启一个新事务/ /实现转账操作:小王向小张的账户上转2000元/ UPDATE account SET balance=balance-2000 WHERE accountName=’小王’; UPDATE account SET balance=balance+2000 WHERE accountName=’小张’; COMMIT; /提交事务/ /实现转账操作:小王向小张的账户上转4000元/ UPDATE account SET balance=balance-4000 WHERE accountName=’小王’; ROLLBACK;/回滚事务/
    使用事务时要遵循的原则:

    • 事务尽可能简短

      • 事务启动至结束后在数据库管理系统中保留大量资源,以保证事

        务的原子性、一致性、隔离性和持久性

      • 如果在多用户系统中,较大的事务将会占用系统的大量资源,使得系统不堪重负,会影响软件的运行性能,甚至导致系统崩溃

    • 事务中访问的数据量尽量最少
      • 当并发执行事务处理时,事务操作的数据量越少,事务之间对操作数据的争夺就越少
    • 查询数据时尽量不要使用事务
      • 对数据进行浏览查询操作并不会更新数据库的数据时,尽量不使用事务查询数据,避免占用过量的系统资源
    • 在事务处理过程中尽量不要出现等待用户输入的操作
      • 处理事务的过程中,如果需要等待用户输入数据,那么事务会长时间占用资源,有可能造成系统阻塞

    什么是索引:
    1、现实解释:汉语字典中的汉字按页存放,一般都有汉语拼音目录(索引)、偏旁部首目录等
    2、数据存储在数据表中,而索引是创建在数据库表对象上由表中的一个字段或多个字段生成的键组成
    3、是对数据库表中一列或多列值进行排列的一种结构
    作用:

    • 大大提高数据库的检索速度
      • 改善数据库性能
    • MySQL索引按存储类型分类
      • B-树索引(BTREE)
        • InnoDB、MyISAM均支持
    • 哈希索引(HASH)

    常用索引类型:
    普通索引:

    • 基本索引类型
    • 允许在定义索引的列中插入重复值和空值

    唯一索引:

    • 索引列数据不重复
    • 允许有空值

    主键索引:

    • 主键列中的每个值是非空、唯一的
    • 一个主键将自动创建主键索引

    复合索引:

    • 将多个列组合作为索引

    全文索引:

    • 支持值的全文查找
    • 允许重复值和空值

    创建索引:
    唯一索引、全文索引或空间索引,可选 CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名
    删除索引:
    DROP INDEX 索引名 ON 表名;
    注意:
    1、如果创建索引是未指定创建索引的类型,则创建的索引为普通索引通过CREATE INDEX语句无法创建主键索引,主键索引的创建语句
    ALTER TABLE tablename ADD PRIMARY KEY(column)
    2、删除表时,该表的所有索引同时会被删除
    示例:
    创建会员卡管理系统数据库memberdb 创建会员表member #设置memName列为普通索引 CREATE INDEX index_name ON member (memName); #设置identityNum列为唯一索引 CREATE UNIQUE INDEX index_identityNum ON member (identityNum); #设置id列为主键索引 ALTER TABLE member ADD PRIMARY KEY(id); #设置remark列为全文索引
    创建索引的指导原则:

    • 按照下列标准选择建立索引的列
      • 频繁搜索的列
      • 经常用作查询选择的列
      • 经常排序、分组的列
      • 经常用作连接的列(主键/外键)
    • 不要使用下面的列创建索引
      • 仅包含几个不同值的列
      • 表中仅包含几行

    使用索引时注意事项:

    • 查询时减少使用“*”返回表的全部列,不要返回不需要的列
    • 索引应该尽量小,在字节数小的列上建立索引
    • WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前
    • 避免在ORDER BY子句中使用表达式
    • 根据业务数据发生频率,定期重新生成或重新组织索引,进行碎片整理

    查看索引 :
    语法:
    SHOW INDEX FROM 表名;
    示例:
    u查看memberDB数据库中member表的索引信息 USE memberDB;
    MySQL 第六章 - 图1
    是否是唯一索引 该列是否为空 索引类型
    删除索引:
    语法:
    DROP INDEX 索引名 ON 表名;
    示例:
    删除member表中,建立在remark列上全文索引
    注意:

    1. 删除表时,该表的所有索引将同时被删除
    2. 删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除
    3. 如果组成索引的所有列都被删除,则整个索引将被删除

    视图:
    image.pngs
    为什么需要视图:

    1. 不同的人员关注不同的数据
    2. 保证信息的安全性

    什么是视图:

    • 视图是一张虚拟表
      • 表示一张表的部分数据或多张表的综合数据
      • 其结构和数据是建立在对表的查询基础上
    • 视图中不存放数据
      • 数据存放在视图所引用的原始表中
    • 一个原始表,根据不同用户的不同需求,可以创建不同的视图
    • 用途
      • 筛选表中的行
      • 防止未经许可的用户访问敏感数据
      • 降低数据库的复杂程度
      • 将多个物理数据表抽象为一个逻辑数据表
    • 带来的好处
    • 开发人员
      • 限制数据检索更容易
      • 维护应用程序更方便
    • 最终用户
      • 结果更容易理解
      • 获得数据更容易

    创建、查看视图:
    使用SQL语句创建视图
    CREATE VIEW view_name /一般以view_xxx 或v_xxx格式命名/ AS
    使用SQL语句删除视图
    DROP VIEW [IF EXISTS] view_name;
    使用SQL语句查看视图
    SELECT 字段1, 字段2, …… FROM view_name;
    示例:
    Use hospital; DROP VIEW IF EXISTS v_prescription; CREATE VIEW v_prescription AS SELECT pa.patientName AS 姓名, pa.gender AS 性别, pa.birthDate AS 年龄, c.checkItemName AS 检查项目, pr.checkResult AS 检查结果, d.depName AS 检查科室, pr.examDate AS 检查日期 FROM prescription pr INNER JOIN patient pa ON pr.patientID = pa.patientID INNER JOIN department d ON pr.depID=d.depID INNER JOIN checkitem c ON pr.checkItemID=c.checkItemID;
    使用视图注意事项:

    1. 视图中可以使用多个表
    2. 一个视图可以嵌套另一个视图,但最好不要超过3层
    3. 对视图数据进行添加、更新和删除操作会直接影响所引用表中的数据
    4. 当视图数据来自多个表时,不允许添加和删除数据

    查看所有视图:
    USE information_schema;
    注意:使用视图修改数据会有许多限制,一般在实际开发中视图仅用作查询
    数据库备份 :

    • 数据备份
      • 是容灾的基础
      • 指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其他的存储介质的过程
    • MySQL数据备份的常用方法
      • mysqldump备份数据库
      • Navicat备份数据库
    • 数据恢复
      • 是指通过技术手段,将保存在硬盘等存储介质上的丢失的数据进行抢救和恢复的技术

    使用mysqldump命令备份数据库:

    1. mysqldump命令——MySQL的客户端常用逻辑备份工具
    2. 将CREATE和INSERT INTO语句保存到文本文件
    3. 属于DOS命令

      语法:
      mysqldump 连接数据库的参数 需备份的数据库名 需备份的表名若省略,备份所有表 > 备份文件名称
      注意:mysqldump是DOS系统下的命令在使用时,无须进入mysql命令行;否则,将无法执行
      MySQL 第六章 - 图3
      恢复数据库:

    • 在需要恢复数据库数据时,对导出的SQL备份脚本执行导入操作
    • 导入方法
      • 使用mysql命令
      • 使用source命令
      • 使用Navicat导入数据

    mysql为DOS命令:
    语法:
    mysql –u username(用户名) –p (数据库名) [dbname] < filename.sql(备份文件名)
    注意:在执行该语句之前,必须在MySQL服务器中创建新数据库
    因为导出的备份文件中只包含表的备份,而不包含创建的库的语句,因此执行导入操作时必须指定数据库名,且该数据库必须存在
    示例:
    /将hospital数据库备份文件,恢复到新创建的hospitalDB数据库中/
    注意:如果将数据导入一个不存在的数据库,会失败并提示数据库找不到需要先创建数据库hospitalDB,再执行导入操作
    source命令恢复数据库:
    语法:
    source filename;
    注意:登录MySQL服务后使用执行该命令前,先创建并选择恢复后的目标数据库
    示例:
    CREATE DATABASE hospitalDB; #创建数据库 USE hospitalDB; #选择要导入数据库的数据库