• 外键的变种


    ---恢复内容开始---

    外键的三种关系:

      多对一‘,一对多

      多对多

      一对一

    ---恢复内容结束---

    多对一‘,一对多

    create table press(
        id int primary key auto_increment,
        name varchar(20)
    );
    
    create table book(
        id int primary key auto_increment,
        name varchar(20),
        press_id int not null,
             constraint fk_book_press foreign key(press_id) references press(id)
        on delete cascade
        on update cascade
    );
    
    mysql> insert into press(name) values
        -> ("邮电出版社"),
        -> ("理工出版社"),
        -> ("大王出版社");
    Query OK, 3 rows affected (0.05 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql> insert into book(name,press_id) values
        -> ('九阳神功',1),
        -> ('九阴真经',2),
        -> ('九阴白骨爪',2),
        -> ('独孤九剑',3),
        -> ('降龙十巴掌',2),
        -> ('葵花宝典',3)
        -> ;
    Query OK, 6 rows affected (0.08 sec)
    Records: 6  Duplicates: 0  Warnings: 0
    
    mysql> select * from book;
    +----+-----------------+----------+
    | id | name            | press_id |
    +----+-----------------+----------+
    |  1 | 九阳神功        |        1 |
    |  2 | 九阴真经        |        2 |
    |  3 | 九阴白骨爪      |        2 |
    |  4 | 独孤九剑        |        3 |
    |  5 | 降龙十巴掌      |        2 |
    |  6 | 葵花宝典        |        3 |
    +----+-----------------+----------+
    6 rows in set (0.00 sec)
    
    mysql> select * from press;
    +----+-----------------+
    | id | name            |
    +----+-----------------+
    |  1 | 邮电出版社      |
    |  2 | 理工出版社      |
    |  3 | 大王出版社      |
    +----+-----------------+
    3 rows in set (0.00 sec)

     多对多

      多对多:一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对多。看图说话。

      关联方式:foreign key+一张新的表

    mysql> create table book(
        -> id int primary key auto_increment,
        -> name varchar(20)
        -> );
    
    
    mysql> create table author(
        -> id int primary key auto_increment,
        -> name varchar(20)
        -> );
    Query OK, 0 rows affected (0.27 sec)
    
    mysql> create table author2book(
        ->     id int not null unique auto_increment,
        ->     author_id int not null,
        ->     book_id int not null,
        ->     constraint fk_author foreign key(author_id) references author(id)
        ->     on delete cascade
        ->     on update cascade,
        ->     constraint fk_book foreign key(book_id) references book(id)
        ->     on delete cascade
        ->     on update cascade,
        ->     primary key(author_id,book_id)
        -> );
    Query OK, 0 rows affected (0.83 sec)
    
    mysql> insert into author(name) values("egg"),("zz"),("qq"),("wx");
    Query OK, 4 rows affected (0.08 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    mysql> insert into book(name) values("九阳"),("八阳"),("七阳"),("六阳");
    Query OK, 4 rows affected (0.13 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql> insert into author2book(author_id,book_id) values
        -> (1,1),
        -> (1,2),
        -> (1,3),
        -> (1,4),
        -> (2,1),
        -> (2,2),
        -> (2,3),
        -> (3,1),
        -> (3,2),
        -> (4,1);
    Query OK, 10 rows affected (0.14 sec)
    Records: 10  Duplicates: 0  Warnings: 0
    
    mysql> select * from author2book;
    +----+-----------+---------+
    | id | author_id | book_id |
    +----+-----------+---------+
    |  1 |         1 |       1 |
    |  2 |         1 |       2 |
    |  3 |         1 |       3 |
    |  4 |         1 |       4 |
    |  5 |         2 |       1 |
    |  6 |         2 |       2 |
    |  7 |         2 |       3 |
    |  8 |         3 |       1 |
    |  9 |         3 |       2 |
    | 10 |         4 |       1 |
    +----+-----------+---------+
    10 rows in set (0.03 se

    一对一

    一对一:一个用户只能注册一个博客,即一对一的关系。看图说话

      关联方式:foreign key+unique

    #例如: 一个用户只能注册一个博客
    
    #两张表: 用户表 (user)和 博客表(blog)
    # 创建用户表
    create table user(
        id int primary key auto_increment,
        name varchar(20)
    );
    # 创建博客表
    create table blog(
        id int primary key auto_increment,
        url varchar(100),
        user_id int unique,
        constraint fk_user foreign key(user_id) references user(id)
        on delete cascade
        on update cascade
    );
    # 插入数据
    insert into user(name) values
        (1),
        (2),
        (3),
        (4);
    
    insert into blog(url,user_id) values
        ("http://www.cncodad1",1),
        ("http://www.cgscoad2",2),
        ("http://www.cgs.cod3",3),
        ("http://www.cogsdad4",4);
  • 相关阅读:
    SQL Server 存储过程/触发器中调用COM组件的方法
    写入Stream
    Python 3.2 中adodbapi的问题
    Python中将系统输出显示在PyQt中
    动态创建 Lambda 表达式
    Entity Framework框架Code First Fluent API
    扩展IQueryable实现属性名称排序
    在Entity Framework中使用事务
    ASP.NET MVC:通过FileResult向浏览器发送文件
    ASP.NET MVC: 使用自定义 ModelBinder 过滤敏感信息
  • 原文地址:https://www.cnblogs.com/yfjly/p/10653509.html
Copyright © 2020-2023  润新知