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='周伯通');

 

MySQL 中的是一种约束机制,用于维护两个表之间的参照完整性。通过设置,可以确保一个表中的数据与另一个表中的数据保持一致性。例如,在订单管理系统中,“订单明细”表中的“产品ID”字段需要引用“产品”表中的主。 ### 使用步骤 1. **创建包含的表** 首先需要确定作为的目标列,并将它指向另一个表的主。 ```sql CREATE TABLE products ( product_id INT PRIMARY KEY, product_name VARCHAR(50) ); CREATE TABLE order_details ( detail_id INT PRIMARY KEY, product_id INT, quantity INT, FOREIGN KEY (product_id) REFERENCES products(product_id) ); ``` 2. **添加到已存在的表** 如果想在一个已经存在的表上增加,可以用 `ALTER TABLE` 命令: ```sql ALTER TABLE order_details ADD CONSTRAINT fk_product FOREIGN KEY (product_id) REFERENCES products(product_id); ``` 3. **删除约束** 若不再需要某条限制,则可通过下面的方式移除: ```sql ALTER TABLE order_details DROP FOREIGN KEY fk_product; ``` 4. **级联操作** 设置时还可以指定当被关联的数据发生变化(更新或删除)时的行为,默认情况会阻止任何破坏关系的操作发生。常用的有: - ON DELETE CASCADE:如果从父表中删除记录,则自动删除子表中的相关记录。 - ON UPDATE CASCADE:若修改了父表中的值,相应地更改所有依赖于它的值。 示例代码如下所示: ```sql ALTER TABLE order_details ADD CONSTRAINT fk_product FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE ON UPDATE CASCADE; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值