精华内容
下载资源
问答
  • SQL创建多表及多表之间关系

    千次阅读 2018-11-29 22:46:32
    分类表和商品表之间是不是有关系? 如果有关系,在数据库中如何表示这种关系 ```sql create table category(  cid int primary key auto_increment,  cname varchar(10),  cdesc varchar(31) ); insert into ...

    ### SQL 会创建多表及多表的关系

    #### 需求:

    分类表和商品表之间是不是有关系? 如果有关系,在数据库中如何表示这种关系

    ```sql
    create table category(
      cid int primary key auto_increment,
      cname varchar(10),
      cdesc varchar(31)
    );

    insert into category values(null,'手机数码','电子产品,生产');
    insert into category values(null,'鞋靴箱包','江南皮鞋厂倾情打造');
    insert into category values(null,'香烟酒水','黄鹤楼,茅台,二锅头');
    insert into category values(null,'酸奶饼干','娃哈哈,蒙牛酸酸乳');
    insert into category values(null,'馋嘴零食','瓜子花生,八宝粥,辣条');

    select * from category;
    select cname,cdesc from category;

    --所有商品
    1.商品ID
    2.商品名称
    3.商品的价格
    4.生产日期
    5.商品分类ID

    商品和商品分类 : 所属关系
    create table product(
        pid int primary key auto_increment,
          pname varchar(10),
          price double,
          pdate timestamp,
          cno int
    );

    insert into product values(null,'小米mix4',998,null,1);
    insert into product values(null,'锤子',2888,null,1);
    insert into product values(null,'阿迪王',99,null,2);
    insert into product values(null,'老村长',88,null,3);
    insert into product values(null,'劲酒',35,null,3);
    insert into product values(null,'小熊饼干',1,null,4);
    insert into product values(null,'卫龙辣条',1,null,5);
    insert into product values(null,'旺旺大饼',1,null,5);

    //插入数据会失败
    insert into product values(null,'副表',1,null,12);

    ```

    #### 技术分析:

    - 多表之间的关系如何来维护

      外键约束: foreign key

      - 给product中的这个cno 添加一个外键约束

        alter table product add foreign key(cno)  references  category(cid);

      - 自己挖坑

      - 从分类表中,删除分类为5信息,

        - delete from category where cid =5;  //删除失败
        - 首先得去product表, 删除所有分类ID=5的所有商品

    - 建数据库原则:

      - 通常情况下,一个项目/应用建一个数据库


    - 多表之间的建表原则

      - 一对多 : 商品和分类

        - 建表原则: 在多的一方添加一个外键,指向一的一方的主键

          ​

      - 多对多: 老师和学生, 学生和课程

        建表原则: 建立一张中间表,将多对多的关系,拆分成一对多的关系,中间表至少要有两个外键,分别指向原来的那两张表

        ​

      - 一对一: 班级和班长, 公民和身份证, 国家和国旗

        - 建表原则:  

          - 将一对一的情况,当作是一对多情况处理,在任意一张表添加一个外键,并且这个外键要唯一,指向另外一张表
          - 直接将两张表合并成一张表
          - 将两张表的主键建立起连接,让两张表里面主键相等

        - 实际用途: 用的不是很多.    (拆表操作  )

          - 相亲网站: 
            - 个人信息 : 姓名,性别,年龄,身高,体重,三围,兴趣爱好,(年收入,  特长,学历, 职业, 择偶目标,要求)
            - 拆表操作 : 将个人的常用信息和不常用信息,减少表的臃肿, 

    展开全文
  • mysql表与表之间创建外键关系

    千次阅读 2011-04-21 23:44:00
     FOREIGN KEY(cardtype_id) REFERENCES card_type(usertype_id) ON DELETE CASCADE,##创建外键关系语句  FOREIGN KEY(user_id) REFERENCES user_info(user_id) ON DELETE CASCADE ##创建外键关系语句 )TYPE=...

    CREATE DATABASE bankDB;

    USE bankDB;

    ##drop TABLE user_info
    CREATE TABLE user_info(
        user_id INT AUTO_INCREMENT PRIMARY KEY,
        user_name NVARCHAR(30),
        user_sex NVARCHAR(4)
    );

    ##drop TABLE card_type
    CREATE TABLE card_type(
        usertype_id INT AUTO_INCREMENT PRIMARY KEY,
        usertype_Name NVARCHAR(30)
    );

    ##DROP TABLE user_card
    CREATE TABLE user_card(
        usercard_id INT AUTO_INCREMENT PRIMARY KEY,
        usercard_number NVARCHAR(30),
        usercard_pwd INT,
        usercard_remark TEXT,
        cardtype_id INT,#外键user_type
        user_id INT,#外键user_info
        FOREIGN KEY(cardtype_id) REFERENCES  card_type(usertype_id) ON DELETE CASCADE,##创建外键关系语句
        FOREIGN KEY(user_id) REFERENCES  user_info(user_id) ON DELETE CASCADE ##创建外键关系语句
    )TYPE=INNODB;

    INSERT INTO user_card VALUES (NULL,'500226198705088574',123456,'备注',1,1);
    INSERT INTO user_card VALUES (NULL,'500226199995088574',123456,'备注',2,1);
    INSERT INTO user_card VALUES (NULL,'500226155505088574',123456,'备注',3,1);
    INSERT INTO user_card VALUES (NULL,'500226198705088574',123456,'备注',1,2);
    INSERT INTO user_card VALUES (NULL,'500226777705088574',123456,'备注',1,3);
    INSERT INTO user_card VALUES (NULL,'500226192115088574',123456,'备注',1,4);
    INSERT INTO user_card VALUES (NULL,'500226097050488574',123456,'备注',1,6);
    INSERT INTO user_card VALUES (NULL,'500226777705088574',123456,'备注',2,3);
    INSERT INTO user_card VALUES (NULL,'500226192115088574',123456,'备注',3,4);
    INSERT INTO user_card VALUES (NULL,'500226097050488574',123456,'备注',1,8);

    INSERT INTO user_info VALUES (NULL,'张三0','男');
    INSERT INTO user_info VALUES (NULL,'张三1','女');
    INSERT INTO user_info VALUES (NULL,'张三2','男');
    INSERT INTO user_info VALUES (NULL,'张三3','男');
    INSERT INTO user_info VALUES (NULL,'张三4','男');
    INSERT INTO user_info VALUES (NULL,'张三5','男');
    INSERT INTO user_info VALUES (NULL,'张三6','女');
    INSERT INTO user_info VALUES (NULL,'张三7','女');
    INSERT INTO card_type VALUES (NULL,'信贷卡');
    INSERT INTO card_type VALUES (NULL,'借记卡');
    INSERT INTO card_type VALUES (NULL,'消费卡');

    SELECT * FROM user_info;
    SELECT * FROM card_type;
    SELECT * FROM user_card;


    ######查询卡:信贷卡的用户信息记录#######
    ##方法一:
    SELECT  user_info.user_id,user_info.user_name,user_info.user_sex
        FROM user_info,user_card,card_type
            WHERE   user_info.user_id=user_card.user_id
                AND user_card.cardtype_id=card_type.usertype_id
                AND card_type.usertype_Name='信贷卡';
               
    SELECT  * FROM user_info,user_card,card_type
    ##方法二
    SELECT * FROM user_info WHERE user_id IN(
        SELECT user_id FROM user_card WHERE cardtype_id =(
            SELECT usertype_id FROM card_type WHERE usertype_Name='信贷卡')
        );

    ##左连接(以user_info为显示基础,user_card没有符合条件则以null填充显示)
    SELECT DISTINCT * FROM user_info LEFT JOIN user_card ON user_info.user_id=user_card.user_id
    ##右连接(与上面相反)
    SELECT DISTINCT * FROM user_info RIGHT JOIN user_card ON user_info.user_id=user_card.user_id
    ##内连接(ON等同于where)
    SELECT DISTINCT * FROM user_info INNER JOIN user_card ON user_info.user_id=user_card.user_id

    展开全文
  • 与表之间关系

    万次阅读 2018-05-29 16:42:45
    与表之间关系与表之间关系(设计表时考虑的)有三种:一对一、一对多(多对一)、多对多。一对一一对一:一张表的一条记录一定只能另外一张表的一条记录进行对应;反之亦然。 一个常用表中的一条记录,...

    表与表之间的关系

    表与表之间的关系(设计表时考虑的)有三种:一对一、一对多(多对一)、多对多。

    一对一

    一对一:一张表的一条记录一定只能与另外一张表的一条记录进行对应;反之亦然。

     


    一个常用表中的一条记录,永远只能在一张不常用表中匹配一条记录;反过来,一个不常用表中的一条记录在常用表中也只能匹配一条记录:一对一关系。

    在实际的开发中应用不多,因为一对一可以创建成一张表。

    建表原则:

    外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一unique。

    外键是主键:主表的主键和从表的主键,形成主外键关系。

     

    一对多

    一对多:一张表中有一条记录可以对应另外一张表中的多条记录;但是反过来,另外一张表的一条记录只能对应第一张表的一条记录。这种关系就是一对多或者多对一。

     

     

     

    分类和商品:一个分类对应多个商品,一个商品只能属于某一个分类。

    部门和员工:一个部门可以有多个员工,一个员工只能属于某一个部门。

    建表原则:

    * 在多的一方创建一个字段,字段作为外键指向一的一方的主键。

     

    多对多

    多对多:一张表中(A)的一条记录能够对应另外一张表(B)中的多条记录;同时B表中的一条记录也能对应A表中的多条记录:多对多的关系。

     

     

    增加中间表之后,中间表与老师表形成了一对多的关系,而且中间表是多表,维护了能够唯一找到一表的关系;同样的,学生表与中间表也是一个一对多的关系。一对多的关系可以匹配到关联表之间的数据。

    学生找老师:找出学生id->中间表寻找匹配记录(多条)->老师表匹配(一条)

    老师找学生:找出老师id->中间表寻找匹配记录(多条)->学生表匹配(一条)

    建表原则:

    * 需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键。

     

     

     

    展开全文
  • **语法:**alter table 从 add [constraint] [外键名称] foreign key (从外键字段名) references 主 (主的主键); [外键名称] 用于删除外键约束的,一般建议“_fk”结尾 alter table 从 drop foreign ...

    一. 外键

    这里写图片描述
    这里写图片描述

    声明外键约束:
    **语法:**alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
    [外键名称] 用于删除外键约束的,一般建议“_fk”结尾
    alter table 从表 drop foreign key 外键名称

    使用外键的目的:
    保证数据完整性

    实例:
    1.登陆MySQL
    这里写图片描述

    2.创建并使用库web09
    这里写图片描述

    3.创建主表
    这里写图片描述

    4.创建从表product
    这里写图片描述

    5.设置编码
    这里写图片描述

    6.向主表中添加数据
    这里写图片描述

    7.向从表中添加数据
    这里写图片描述

    8.查询主表所有数据
    这里写图片描述

    9.查询从表所有数据
    这里写图片描述

    10.声明外键约束
    这里写图片描述

    11.主表不能删除从表已经使用的数据
    这里写图片描述

    12.必须先删除从表使用的数据
    这里写图片描述

    13.才能删除主表中的数据
    这里写图片描述

    总结:
    从表不能够添加(更新),主表中不存在的数据。
    主表不能够删除(更新),从表中已经使用的数据。

    二.表与表之间的关系

    表与表之间的关系,说的就是表与表数据之间的关系。
    这里写图片描述
    这里写图片描述

    展开全文
  • 如何创建数据库表之间的关联关系

    万次阅读 2015-10-24 16:04:22
    例如两张:Husband和wife,在数据库中设置彼此的主键id相互关联(少用) 此时在两个实体类中不用添加任何的对象属性 2.一对一的单向外键关联 例如两张:Husband和wife ***在设计实体类时建立联系: 对象
  • 我想创建一个人员信息和部门信息,同时,我们想通过人员信息知道此人的部门信息。我们应该怎样建表呢。 下面我以表格的形式展示咱们数据库的结构。 人员信息 人员id 姓名 性别 部门id 001 小红...
  • 数据库表之间关系

    万次阅读 2018-09-15 08:53:14
    数据库表与表之间关系(设计表时考虑的)有三种:一对一、一对多(多对一)、多对多。 一对一 建表原则: 外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一unique。 外键是主键:主表的...
  • MySQL数据库表与表之间关系

    千次阅读 2019-09-06 21:52:54
    一对多(多对一) 用户和订单 用户表user和 订单表orders 一个用户可以对应多个订单 ------ 用户和订单是一对多的关系 ...在创建表的时候直接创建出外键约束:foreign key(uid) references user(uid) cre...
  • 本文尝试用实际开发中常见的电商场景来厘清其背后需要的数据库中表与表之间关系,目的在于能够分析出常见购物网站的中实体间的关系,并能创建出对应的表。 文章目录1.实体间常见关系2.数据库实现(一对多)2.1一对...
  • 知识点:数据库表的相关概念、创建数据库表的方法、设计数据库表、向数据库表中插入数据、建立不同数据库表之间关系、删除数据库表。 1、数据表相关的一些概念 1.1 数据库里的数据是如何保存的? 数据库...
  • 通常在实际工作中,数据库中表格都不是独立存在的,且表与表之间是有种联系的,比如两张表格,一张为分类表category,一张为商品表product。在分类表中有两个信息,cid、cname,商品表中有三个数据信息pid、name、...
  • 三种表关系关系表创建

    千次阅读 2020-01-27 13:33:18
    约束1:创建表 先建立被关联表,才能建关联表 约束2:查数据 被关联表先插入数据,关联表才能插入数据 约束3:删数据 先删除关联表中的数据,才能删被关联表的数据 约束4:不能改关联字段 级联: 同步更新,同步删除 on ...
  • 数据库设计(表与表之间的3种关系)

    万次阅读 多人点赞 2016-08-07 02:31:35
    与表之间一般存在三种关系,即一对一,一对多,多对多关系。 下面分别就三种关系讲解数据库相关设计的思路和思考过程;(1)一对一关系 例如,下面的一张表,保存了人的相关信息,有男有女,要求查处所有的夫妻。 ...
  • Power bi分析并建立表与表之间关系,同时通过表与表之间的数据绘制一些可视化图形。
  • 当我们所做的项目要和数据库打交道的时候,总会要在数据库中创建表。 而表之间关系:一对多,多对多,一对...表与表之间的关联关系: 一对多: CustomerDaoImpl.java package com.xbmu.dao.impl; import java.s
  • 表与视图之间关系

    千次阅读 2019-04-16 09:42:03
    数据库中的数据都是存储在中的,而视图只是一个或多个依照某个条件组合而成的结果集,一般来说你可以用update,insert,delete等sql语句修改中的数据,而对视图只能进行select操作。但是也存在可更新的视图,...
  • 数据库中表与表之间存在着三种关系,也就是系统设计中的三种实体关系。下面进行简单阐述。一对一创建表的原则有两种: 唯一外键对应 在任意一方添加一个外键来描述对应关系。如下图所示: 或者 主键对应
  • 本篇博客讲解(子查询)非相关子查询/相关子查询,一对一,一对多,多对一,多对的的关系!准备:首先我们创建一列sex。再为部分行设置好值0(女)或者1(男);delete from stud where age=26; 删除年龄为26的行。 ...
  • 2.1 多表之间关系 1、一对一(了解): 如,人和身份证; 2、一对多(多对一): 如,部门和员工,一个部门有多个员工,一个员工只能对应一个部门; 3、多对多: 如,学生和课程,一门课程可以被多个学生...
  • MYSQL创建及多关系

    千次阅读 2018-10-08 09:04:13
    前一篇博文学习总结了mysql的基本操作,DML创建的表与表之间有着一对多,多对多,一对一的关系,借着学习的劲头,总结一下这些关系。   一对多:部门和员工,卤肉店和肉,订单和商品  用户和订单  -- 创建...
  • 其中A1和B1之前有外键关联关系(A1的有一个字段指向B1),如何跨用户建立两个表之间的外键关系: 1. grant select, insert, update, delete, references, alter, index on B1 to A;  其中,B1是指表,A指用户,...
  • oracle 用户与表空间之间关系

    千次阅读 2018-09-05 20:37:22
    用户=商家 表=商品 表空间=仓库 1个商家能有很多商品,1个商品只能属于一个商家 1个商品可以放到仓库A,也可以放到仓库B,但不能同时放入A和B 仓库不属于任何商家 ...表空间:创建表空间会在...
  • 双向关系:表与表之间可以互相指向。 2.根据关联的表的不同可以分为: 1对1关系 1对多关系 多对多关系 例如:1个客户可以对应多个订单,是1对多的关系。 (1)1对多关联: 单向多对1:使用映射,在数据库中就会...
  • 一、一对多的关系 例:公司员工的关系,公司为一,公司员工为多,需要在多方建立外键指向一方的主键。...创建一张用户和一张角色,还需创建一张关系表关系表至少有两个外键,分别指向两张的主
  • 我先来跟大家探讨一下儿数据库间建立关系的利敝: 利:如果你的关系建立的没有错误的话数据的参照完整性肯定能得到保证,不会出现数据不一致的情况。实现级连删除非常方便。省去了为保证参照完整性用代码保证级...
  • 要求:请安装Kingbase数据库软件,在数据库软件中创建一个自己名字的模式,在该模式下创建学生关系数据、课程、选课表。 插入一些数据,尝试查询、更新、删除 二、相关原理知识 (完成实验所用到的相关原理...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 566,016
精华内容 226,406
关键字:

如何创建表与表之间的关系