zoukankan      html  css  js  c++  java
  • mysql外键使用

    一、外键
      1.外键:链接两张表的字段,通过主表的主键和从表的外键来描述主外键关系,呈现的是一对多的关系。例如:商品类别(一)对商品(多),主表:商品类别表,从表:商品表。
      2.外键的特点:从表外键的值是对主表主键的引用、从表外键类型必须与主表主键类型一致
      3.声明外键约束
        语法:alter table (从表) add [constraint] (外键名称) foreign key (从表外键字段名) references 主表 (主表的主键)
        例如:(1).ALTER TABLE product(从表) ADD CONSTRAINT cid(外键名称) FOREIGN KEY (cid)(从表外键字段名) REFERENCES category(主表) (cid)(主表的主键);
              (2). ALTER TABLE product ADD FOREIGN KEY (cid) REFERENCES category (cid); 
        [外键名称]用于删除外键约束,一般建议”_fk”结尾
        alter table 从表 drop foreign key 外键名称; 
      3. 使用外键的目的:保证数据完整性
      4.注意事项:从表外键不能添加主表中不存在的记录、主表不能删除从表中已经引用的记录 
    二、表与表之间的关系
      表与表之间的关系,就是表与表数据之间的关系。
      1.    一对多关系:
        常见实例:客户和订单,分类和商品,部门和员工
        一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键
        语法:ALTER TABLE product ADD FOREIGN KEY (cid) REFERENCES category (cid);
      2.    多对多关系:
        常见实例:学生和课程,商品和订单,人和角色
        多对多建表原则:需要创建第三张表,中间表至少要有两个字段,这两个字段分别作为外键指向各自一方的主键(就是将一个多对多拆分成两个一对多)
        两张表分别都是主表,第三张表为从表,提供两个字段,都是外键。 
        语法:alter table 从表(stu_course) add foreign key(sno) references stu(sid);
        alter table 从表(stu_course) add foreign key(cno) references course(cid); 
      3.    一对一关系:(了解)
        在实际开发中应用不多,因为一对一可以创建成一张表
        常见实例:公司和地址
        两种原则:外键唯一,外键是主键 
    三、操作
      1.多表查询 
        (1).交叉连接查询(得到两个表的乘积,基本不使用)
          select * from A,B;
        (2).内连接查询(使用关键字:inner join -- inner可以省略)
          隐式内连接:select * from A,B where 条件;
          例如:select * from category c,product p where c.cid=p.cid;
          显式内连接:select * from A inner join B on 条件;
          例如:select * from category as c inner join product as p on p.cid=c.cid;
        (3).外连接查询(使用关键字outer join --outer可以省略)
          左外连接:left outer join
          select * from A left outer join B on 条件;
          例如:select * from category c left join product p on p.cid=c.cid;
          右外连接:right outer join
          select * from A right outer join B on 条件;
          例如:select * from category c right join product p on p.cid=c.cid;
        内连接和外连接的区别:
          左外连接:查询的是左表全部及两个表的交集
          内连接:查询的是两个表的交集
          右外连接:查询的是右表全部及两个表的交集
      2.子查询 
        一条select语句结果作为另一条select语法的一部分(查询条件、查询结果、表等)
        例如:查询化妆品分类上架商品详情
        select * from product where cid =(select cid from category where cname='周伯通');
  • 相关阅读:
    VGA实验 :逻辑分析仪
    VGA实验:点亮屏幕
    ASP.NET 4‎.0 生成 eurl.axd Http异常错误的处理方法 (汗IIS 怎这么多莫名其妙的问题)
    腾讯检测 IP 省市的接口
    hql 中cast 方法的使用
    asp.net 防止外部提交数据(转)
    为 SQL Server 启用缓存通知
    net中前台 javascript与后台c#函数相互调用
    const 与 readonle 的异同
    获取页面执行时间的几种方法(asp.net转)
  • 原文地址:https://www.cnblogs.com/phpper/p/7814029.html
Copyright © 2011-2022 走看看