• MySQL学习笔记2(多表操作)


    外键:使两张表之间存在关联

    特点:

    1.从表外键的值是对主表主键的引用

    2.从表外键类型,必须与主表主键类型一致

    示例:

    创建两个表并准备数据:

    USE mybase;
    CREATE TABLE category(
        cid VARCHAR(32) PRIMARY KEY,
        cname VARCHAR(100)
    );
    CREATE TABLE product(
        pid VARCHAR(32) PRIMARY KEY,
        pname VARCHAR(40),
        price DOUBLE,
        category_id VARCHAR(32)
    );
    INSERT INTO category(cid,cname) VALUES('c001','家电');
    INSERT INTO category(cid,cname) VALUES('c002','服饰');
    INSERT INTO category(cid,cname) VALUES('c003','化妆品');
    
    INSERT INTO product(pid,pname,price,category_id) VALUES('p001','联想','5000','c001');
    INSERT INTO product(pid,pname,price,category_id) VALUES('p002','海尔','5000','c001');
    INSERT INTO product(pid,pname,price,category_id) VALUES('p003','雷神','5000','c001');
    
    INSERT INTO product(pid,pname,price,category_id) VALUES('p004','JACK JONES','800','c002');
    INSERT INTO product(pid,pname,price,category_id) VALUES('p005','真维斯','200','c002');
    INSERT INTO product(pid,pname,price,category_id) VALUES('p006','花花公子','440','c002');
    INSERT INTO product(pid,pname,price,category_id) VALUES('p007','劲霸','2000','c002');
    
    INSERT INTO product(pid,pname,price,category_id) VALUES('p008','香奈儿','800','c003');
    INSERT INTO product(pid,pname,price,category_id) VALUES('p009','相宜本草','200','c003');
    View Code

    执行这段代码没有问题:

    DELETE FROM category WHERE cid='c003';

    添加外键关系:

    ALTER TABLE product ADD FOREIGN KEY(category_id) REFERENCES category(cid);

    这时候两个表中的数据就存在外键关系

    执行这段代码就会出错:

    DELETE FROM category WHERE cid='c003';

     如果想成功,需要先删除和它有关的product表中的两条数据

    如果从表添加数据,不能添加主表中不存在的记录,例如添加category_id为c004的数据

    表与表之间的关系:

    一对多:

    实例:客户和订单,分类和商品

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

    上边这个实例,就是一个一对多案例

    多对多:

    实例:学生选课

    多名学生,选择多门课程,学生随意选择

    需要注意多对多的建表方法:

    创建第三张表作为中间表,至少两个字段

    这两个字段分别作为外键指向各自一方的主键:

    具体代码:

    CREATE TABLE 从表(
        字段1,
        字段2,
        ...
    )
    ALTER TABLE 从表 ADD FOREIGN KEY(字段1) REFERENCES 主表1(主键);
    ALTER TABLE 从表 ADD FOREIGN KEY(字段2) REFERENCES 主表2(主键);

    一对一:

     实例:公司的地址

    一个公司对应一个地址,一对一

    实际开发中不使用,通常写在一张表中即可

    多表查询:

     使用上边创建的两张表以及数据:

    两张表的全集
    SELECT * FROM category,product;
    
    
    内连接查询
    SELECT * FROM category INNER JOIN product ON cid=category_id;
    
    SELECT * FROM category c,product p WHERE c.cid=p.category_id;
    
    
    外连接查询
    SELECT * FROM category LEFT JOIN product ON cid=category_id;
    
    SELECT * FROM category RIGHT JOIN product ON cid=category_id;
    
    
    
    子查询
    
    SELECT cid FROM category WHERE cname='化妆品';
    
    SELECT * FROM product WHERE category_id=(SELECT cid FROM category WHERE cname='化妆品');
  • 相关阅读:
    IEEE Bigger系列题解
    Codeforces Round #354 (Div. 2) E. The Last Fight Between Human and AI 数学
    Codeforces Round #354 (Div. 2) D. Theseus and labyrinth bfs
    Codeforces Round #354 (Div. 2) C. Vasya and String 二分
    Codeforces Round #354 (Div. 2) B. Pyramid of Glasses 模拟
    Codeforces Round #354 (Div. 2) A. Nicholas and Permutation 水题
    Codeforces Round #FF (Div. 1) B. DZY Loves Modification 优先队列
    Codeforces Round #FF (Div. 1) A. DZY Loves Sequences 动态规划
    2016 UESTC DP专题题解
    HDU 5701 中位数计数 暴力
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/8388155.html
Copyright © 2020-2023  润新知