zoukankan      html  css  js  c++  java
  • MySQL外键的三种关系

    一对多

    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
    );
    
    # 先往被关联表中插入记录
    insert into press(name) values
    ('北京工业地雷出版社'),
    ('人民音乐不好听出版社'),
    ('知识产权没有用出版社')
    ;
    
    # 再往关联表中插入记录
    insert into book(name,press_id) values
    ('九阳神功',1),
    ('九阴真经',2),
    ('九阴白骨爪',2),
    ('独孤九剑',3),
    ('降龙十巴掌',2),
    ('葵花宝典',3)
    ;
    
    查询结果:
    mysql> select * from book;
    +----+-----------------+----------+
    | id | name            | press_id |
    +----+-----------------+----------+
    |  1 | 九阳神功        |        1 |
    |  2 | 九阴真经        |        2 |
    |  3 | 九阴白骨爪      |        2 |
    |  4 | 独孤九剑        |        3 |
    |  5 | 降龙十巴掌      |        2 |
    |  6 | 葵花宝典        |        3 |
    +----+-----------------+----------+
    rows in set (0.00 sec)
    
    mysql> select * from press;
    +----+--------------------------------+
    | id | name                           |
    +----+--------------------------------+
    |  1 | 北京工业地雷出版社             |
    |  2 | 人民音乐不好听出版社           |
    |  3 | 知识产权没有用出版社           |
    +----+--------------------------------+
    rows in set (0.00 sec)
    

    多对多

    # 创建被关联表author表,之前的book表在多对一的关系已创建
    create table author(
        id int primary key auto_increment,
        name varchar(20)
    );
    #这张表就存放了author表和book表的关系,即查询二者的关系查这表就可以了
    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)
    );
    #插入四个作者,id依次排开
    insert into author(name) values('qwe'),('asd'),('zxc'),('wer');
    
    # 每个作者的代表作
    qwe: 九阳神功、九阴真经、九阴白骨爪、独孤九剑、降龙十巴掌、葵花宝典
    asd: 九阳神功、葵花宝典
    zxc:独孤九剑、降龙十巴掌、葵花宝典
    wer:九阳神功
    
    # 在author2book表中插入相应的数据
    
    insert into author2book(author_id,book_id) values
    (1,1),
    (1,2),
    (1,3),
    (1,4),
    (1,5),
    (1,6),
    (2,1),
    (2,6),
    (3,4),
    (3,5),
    (3,6),
    (4,1)
    ;
    # 现在就可以查author2book对应的作者和书的关系了
    mysql> select * from author2book;
    +----+-----------+---------+
    | id | author_id | book_id |
    +----+-----------+---------+
    |  1 |         1 |       1 |
    |  2 |         1 |       2 |
    |  3 |         1 |       3 |
    |  4 |         1 |       4 |
    |  5 |         1 |       5 |
    |  6 |         1 |       6 |
    |  7 |         2 |       1 |
    |  8 |         2 |       6 |
    |  9 |         3 |       4 |
    | 10 |         3 |       5 |
    | 11 |         3 |       6 |
    | 12 |         4 |       1 |
    +----+-----------+---------+
    rows in set (0.00 sec)

    一对一

    #例如: 一个用户只能注册一个博客
    
    #两张表: 用户表 (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
    ('qwe'),
    ('asd'),
    ('zxc'),
    ('ert')
    ;
    # 插入博客表的记录
    insert into blog(url,user_id) values
    ('http://www.cnblog/qwe',1),
    ('http://www.cnblog/asd',2),
    ('http://www.cnblog/zxc',3),
    ('http://www.cnblog/ert',4)
    ;
    # 查询wusir的博客地址
    select url from blog where user_id=2;
  • 相关阅读:
    变Win 2003为工作站
    搞笑短信
    ECC加密算法入门介绍
    搞笑短信
    万能Ghost系统制作教程
    “注册编辑已被管理员停用”之解决办法
    让Win7任务栏的“库”显示“我的电脑”
    全景拼图利器PTGui Pro 9.1.6 Retail汉化版
    Win7远程桌面不能连接的解决方案
    到底谁霸占了A类的IP地址
  • 原文地址:https://www.cnblogs.com/NachoLau/p/10398519.html
Copyright © 2011-2022 走看看