mysql设计概念多表查询和事务制作实例分析

  本篇内容介绍了“mysql设计概念、多表查询和事务操作实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
 
  数据库设计简介
 
  1.数据库设计概念
 
  数据库设计就是根据业务系统具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型。
 
  建立数据库中的表结构以及表与表之间的关联关系的过程。
 
  有哪些表?表里有哪些字段?表和表之间有什么关系?
 
  2.数据库设计步骤
 
  需求分析:数据库是什么?数据具体有哪些属性?数据与属性的特点是什么?
 
  逻辑分析:通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统。
 
  物理设计:根据数据库自身的特点把逻辑设计转换为物理设计。
 
  维护设计:对新的需求进行建表和对表的优化。
 
  3.表关系简介
 
  在真实的开发中,一个项目中的数据,一般都会保存在同一个数据库中,但是不同的数据需要保存在不同的数据表中。这时不能把所有的数据都保存在同一张表中。
 
  那么在设计保存数据的数据表时,我们就要根据具体的数据进行分析,然后把同一类数据保存在同一张表中,不同的数据进行分表处理。
 
  数据之间必然会有一定的联系,我们把不同的数据保存在不同的数据表中之后,同时还要在数据表中维护这些数据之间的关系。这时就会导致表和表之间必然会有一定的联系。这时要求设计表的人员,就需要考虑不同表之间的具体关系。
 
  在数据库中,表总共存在三种关系,真实的数据表之间的关系:多对多关系、一对多(多对一)、一对一(极少),(一对一关系就是我们之前学习的Map集合的key-value关系)
 
  4.外键级联
 
  在修改和删除主表的主键时,同时更新或删除从表的外键值,称为级联操作
 
  ON UPDATE CASCADE – 级联更新,主键发生更新时,外键也会更新
 
  ON DELETE CASCADE – 级联删除,主键发生删除时,外键也会删除
 
  5.总结
 
  1.为何要引用外键约束?
 
  让表的数据有效性,正确性。提高查询效率。
 
  2.添加外键约束语法?
 
  constraint 外键约束名 foreign key(当前表的字段名) references 主表(主键)
 
  3.有了外键约束操作数据注意事项?
 
  要求添加数据需要先添加主表,然后添加从表。
 
  要求删除数据需要先删除从表,然后再删除主表。
 
  表关系(一对多)
 
  一对多(多对一)
 
  如:部门表 和 员工表
 
  一个部门对应多个员工,一个员工对应一个部门
 
  实现方式:在多的一方建立外键,指向一的一方的主键
 
  mysql设计概念、多表查询和事务操作实例分析
 
  表关系之一对一
 
  一对一
 
  如:用户和 用户信息
 
  一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能
 
  实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)
 
  mysql设计概念、多表查询和事务操作实例分析
 
  多表查询
 
  mysql设计概念、多表查询和事务操作实例分析
 
  准备数据
 
  -- 价格create table price(
 
      id    int primary key auto_increment,
 
      price double);-- 水果 create table fruit(
 
      id       int primary key auto_increment,
 
      name     varchar(20) not null,
 
      price_id int,
 
      foreign key (price_id) references price (id));-- 数据insert into pricevalues (1, 2.30);insert into pricevalues (2, 3.50);insert into pricevalues (4, null);insert into fruitvalues (1, '苹果', 1);insert into fruitvalues (2, '橘子', 2);insert into fruitvalues (3, '香蕉', null);
 
  内连接查询
 
  1.什么是内连接
 
  内连接查询又称为交集查询,也就是查询只显示满足条件的数据
 
  2.显示内连接
 
  显示内连接:使用INNER JOIN...ON语句,可以省略INNER关键字
 
  -- 语法核心select * from 表名1 inner join 表名2 on 条件;-- 或者select * from 表名1 join 表名2 on 条件;
 
  3.隐式内连接
 
  看不到JOIN关键字,条件使用WHERE指定
 
  select 列名,列名,... from 表名1,表名2 where 表名1.列名=表名2.列名;
 
  4.示例
 
  查询水果的价格
 
  -- 隐式内连接select * from fruit,price where fruit.price_id=price.id;-- 显式内连接select * from fruit inner join price on fruit.price_id=price.id;
 
  mysql设计概念、多表查询和事务操作实例分析
 
  查询苹果的信息,显示苹果的id,名字,价格
 
  -- 方式1select fruit.id, fruit.name, price.pricefrom fruit,
 
       pricewhere fruit.price_id = price.id  and fruit.name = '苹果';-- 方式2select fruit.id, fruit.name, price.pricefrom fruit         inner join
 
       price     on fruit.price_id = price.id         and fruit.name = '苹果';
 
  5.总结
 
  1.内连接作用?
 
  过滤笛卡尔积
 
  获取两表的交集部分(都满足条件的部分)
 
  2.什么是隐式内连接和显示内连接?
 
  隐式内连接:看不到JOIN:select 列名,列名....from 表名1,表名2 where 表名1.列名=表名2.列名;
 
  显示内连接:看得到JOIN:select * from 表名1 inner join 表名2 on 条件;
 
  3.内连接查询步骤?
 
  1)确定查询几张表
 
  2)确定表连接条件
 
  3)根据需要在操作
 
  外连接查询
 
  1.左外连接
 
  左表的记录全部显示出来
 
  外表只会显示符合搜索条件的记录
 
  语法格式:
 
  select * from 表1 left [outer] join 表2 on 条件;
 
  说明:
 
  left关键字左边的表定义为左表,left关键字右边的表定义为右表,查询的内容以左表为主
 
  如果左表有数据,而右表没有数据对应的数据,仍然会把左表数据进行显示
 
  outer关键字可以省略
 
  练习:
 
  不管能否查到水果对应价格,都要把水果显示出来
 
  -- 左外连接查询select * from fruit left outer join price on fruit.price_id=price.id;
 
  2.右外连接
 
  右表的记录全部表示出来
 
  左表只会显示符合搜索条件的记录
 
  语法格式:
 
  select * from 表名1 right [outer] join 表名2 on 条件;
 
  说明:
 
  right关键字左边的表定义为左表,right关键字右边的表定义为右表,查询的内容以右表为主
 
  如果右表没有数据,而左表没有对应的数据,仍然会把右表数据进行显示
 
  outer关键字可以省略
 
  练习:
 
  不管能否查到价格对应的水果,都要把价格显示出来
 
  select * from fruit right outer join price on fruit.price_id=price.id;

  总结:
 
  1.掌握左外连接查询格式?
 
  select * from 表1 left outer join 表2 on 条件;
 
  表1看作为左表,表2看做为右表
 
  2.左外连接查询特点?
 
  在满足要求的基础上保证左表的数据全部显示
 
  3.掌握右外连接查询格式?
 
  select * from 表1 right outer join 表2 on 条件;
 
  4.右外连接查询特点?
 
  在满足要求的基础上,保证右表的数据全部显示
 
  嵌套查询(子查询)
 
  1.什么是子查询
 
  一条查询语句结果作为另一条查询语法一部分。
 
  SELECT 查询字段 FROM 表 WHERE 条件;举例:SELECT * FROM employee WHERE salary=(SELECT MAX(salary) FROM employee);
 
  说明:子查询需要放在()中
 
  三种子查询情况:单行单列、多行单列、多行多列。
 
  2.单行单列
 
  子查询结果是单列,在WHERE后面作为条件
 
  SELECT 查询字段 FROM 表 WHERE 字段=(子查询);
 
  通常使用比较运算符: > 、>= 、<、<=、=等
 
  3.多行单列
 
  子查询结果是多行单列,结果集类似于一个数组,在WHERE后面作为条件,父查询使用IN运算符
 
  -- IN表示在数值中SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);
 
  4.多行多列
 
  子查询结果是多列,在FROM后面作为表
 
  SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;
 
  注意:子查询作为表需要取别名,使用as,可以省略,否则这张表没用名称无法访问表中的字段
 
  事务操作
 
  事务的概念
 
  什么是事务
 
  在实际的业务开发中,有些业务操作要多次访问数据库。一个业务要发送多条SQL语句给数据库执行。需要将多次访问数据库的操作视为一个整体来执行,要么所有的SQL语句全部执行成功。如果其中有一条SQL语句失败,就进行事务的回滚,所有的SQL语句全部执行失败。
 
  简而言之,事务指的是逻辑上的一组操作,组成这组操作的各个单元要么全都成功,要么全都失败。
 
  事务作用:保证在一个事务中多次操作数据库表中数据时,要么全都成功,要么全都失败。
 
  事务的应用场景声明
 
  关于事务在实际中的应用场景:
 
  假设我在淘宝买了一部手机,然后当我付完款,钱已经从我的账户中扣除。正当此时,淘宝转账系统宕机了,那么此时淘宝还没有收到钱,而我的账户的钱已经减少了,这样就会导致我作为买家钱已经付过,而卖家还没有收到钱,他们不会发货物给我。这样做显然是不合理。实际生活中是如果淘宝出问题,作为用户的账户中钱是不应该减少的。这样用

dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。