mysql design concepts and multi-table queries and transaction operations

WBOY
Release: 2022-05-23 20:49:18
forward
2461 people have browsed it

this article brings you relevant knowledge about video tutorial< a>, which mainly introduces related issues database design concepts, including introduction, multi-table query, transaction operation, etc. , let’s take a look at it below, i hope will be helpful to everyone. < p>

mysql design concepts and multi-table queries and transaction operations<

recommended learning: >mysql video tutorial< a><

introduction design< h2>

1. database concepts strong><

  • database is based on the specific needs of business system and combined with dbms we choose construct optimal data storage model for this system. li>
  • the process establishing table structure< code> association between tables in database< code>.
  • what are there? what fields there table? relationship tables? ul>

    2. steps<

  • requirements analysis: database? attributes does have? characteristics attributes? p><

  • logical logical modeling through er diagram< code>, without considering management choose.

  • physical design: convert into physical according itself.

  • maintenance create optimize new requirements.

    3. introduction relationships<

  • #in real development, project generally saved in same database, different stored tables. at time, all cannot table.

  • then when designing save data, must analyze then type table, separate

  • there certain data. after tables, also maintain these . this lead connection people who need consider relationships

    in total three the tables: mark>many-to-many relationship, one-to-many ( many-to-one)< strong>, one-to-one (rarely), (one-to-one key-value map collection learned before)<

    table (many-to-many)< many-to-many<
  • for example: orders products<
  • one product corresponds multiple orders, one order
  • implementation method: third intermediate table< intermediate contains least two foreign keys< associated primary keys two parties< code>

    note: if have many-to-many create add columns introduce other as your own keys. strong> foreign key constraints<
  • foreign used establish link ensure integrity consistency (for example, above table) purpose using relationship: the inserted exist< main if records they deleted will. want delete, first delete associated constraint syntax<
    -- 关键字解释:constraint: 添加约束,可以不写foreign key(当前表中的列名): 将某个字段作为外键references 被引用表名(被引用表的列名) : 外键引用主表的主键-- 创建表时添加外键约束create table 表名(    列名 数据类型,    …   [constraint] [外键名称] foreign key(外键列名) references 主表(主表列名) ); -- 建完表后添加外键约束alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称);-- 删除约束alter table 表名 drop foreign key 外键名称;< pre>
    copy after login< div>< div>

    4.create >-- 订单表create table tb_orders(     id           int primary key auto_increment,     payment      double(10, 2),     payment_type tinyint, -- 0 微信支付  1 支付宝支付     status       tinyint  -- 0 未付款  1 已经支付);-- 商品表create table tb_goods(     id    int primary key auto_increment,     title varchar(100),     price double(10, 2));-- 订单商品中间表create table tb_order_goods(     id       int primary key auto_increment,     order_id int, -- 外键,来自于订单表的主键     goods_id int, -- 外键,来自于商品表的主键     count    int,  -- 购买商品数量     foreign key(order_id) references tb_orders(id),     foreign key(goods_id) references tb_goods(id));< >
    5. cascade<

    when modifying deleting updating or values ​​from time called cascade operation mark><

  • on update cascade< – cascade update, updated, will updated< delete deletion, deleted, deleted<

    6. summary<

    1. why should quote constraints?

    • make valid correct. improve query efficiency. li><

      2. add syntax?

      • constraint name (field current references (primary key)

        3. precautions operating

      • to master first, slave blockquote> (one-to-many)<

        one-to-many (many-to-one)<

      • 如:部门表 和 员工表<
      • 一个部门对应多个员工,一个员工对应一个部门<
      • 实现方式:在多的一方建立外键,指向一的一方的主键< mark>

        表关系之一对一<

        一对一<

      • 如:用户和 用户信息<
      • 一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能<
      • 实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一< strong>(unique)<

        多表查询< h1> >
        准备数据< >-- 价格create table price(     price double);-- 水果 create table fruit(     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.什么是笛卡尔积现象<

      • 笛卡尔积问题:把多张表放在一起,同时去查询,会得到一个结果,而这结果并不是我们想要的数据,这个结果称为笛卡尔积。<
      • 笛卡尔积缺点:查询到的结果冗余了,里面有很多错误的数据,需要过滤。<
      • 多表查询语法:select * from 表名1,表名2;<

        需求:查询两张表中关于水果的信息,要显示水果名称和水果价格< em><

        表设计原则:将价格的主键作为水果的外键< >-- 多表查询语法(同时查询多个表获取到需要的数据)select * from 表名1,表名2;-- 查询价格(我们向查询水果对应的价格,需要将水果表和价格表同时进行查询;)select * from fruit,price;<

        查询结果:

        2.笛卡尔积产生原因< strong>

        fruit< code>表中的每一条记录,都和price< code>表中的每一条进行匹配连接。所得到的最终结果是:fruit表中的条目数乘以price< code>表中的数据的条目数。<

        fruit< code>表的每行记录和price< code>表的每行记录组合的结果就是笛卡尔积<

        3.如何避免笛卡尔积<

        解决上述查询的方案:在查询两张表的同时添加条件进行过滤,比如fruit表的id和必须和price表的id相同< >-- 条件过滤笛卡尔积select * from fruit,price where fruit.price_id="price.id;

  • 内连接查询<

    1.什么是内连接<

    内连接查询又称为交集查询,也就是查询只显示满足条件的数据<

    2.显示内连接<

    显示内连接:使用inner join...on< code>语句,可以省略inner< code>关键字< >-- 语法核心select * from 表名1 inner join 表名2 on 条件;-- 或者select * from 表名1 join 表名2 on 条件;<

    3.隐式内连接<

    看不到join< code>关键字,条件使用where< code>指定< >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;
    查询苹果的信息,显示苹果的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 表名1 inner join 表名2 条件;<

    3.内连接查询步骤?<

  • 1)确定查询几张表<
  • 2)确定表连接条件<
  • 3)根据需要在操作<

    外连接查询<

    1.左外连接<

  • 左表的记录全部显示出来<
  • 外表只会显示符合搜索条件的记录<

    语法格式:< >select * from 表1 left [outer] join 表2 on 条件;<

    说明:< left< code>关键字左边的表定义为左表< mark>,left< code>关键字右边的表定义为右表< mark>,查询的内容以左表为主<

  • 如果左表有数据,而右表没有数据对应的数据,仍然会把左表数据进行显示< outer< code>关键字可以省略<

    练习:<

    不管能否查到水果对应价格,都要把水果显示出来< >-- 左外连接查询select * from fruit left outer join price on fruit.price_id="price.id;
    2.右外连接<

  • 右表的记录全部表示出来<
  • 左表只会显示符合搜索条件的记录< >select * from 表名1 right [outer] join 表名2 on 条件;< right< code>关键字左边的表定义为左表,right< code>关键字右边的表定义为右表,查询的内容以右表为主<
  • 如果右表没有数据,而左表没有对应的数据,仍然会把右表数据进行显示<

    不管能否查到价格对应的水果,都要把价格显示出来< >select * from fruit right outer join price on fruit.price_id="price.id;
    总结:<

    1.掌握左外连接查询格式?<

  • select 表1 left outer 表2 code><
  • 表1看作为左表,表2看做为右表<

    2.左外连接查询特点?<