写点什么

MySQL 进阶 (一) 主外键讲解

  • 2022 年 7 月 13 日
  • 本文字数:1875 字

    阅读完需:约 6 分钟

MySQL进阶(一)主外键讲解

一、什么是外键

      主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性

      外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的。所以说,如果谈到了外键,一定是至少涉及到两张表。例如下面这两张表:

 


     上面有两张表:部门表(dept)、员工表(emp)。Id=Dept_id,而 Dept_id 就是员工表中的外键:因为员工表中的员工需要知道自己属于哪个部门,就可以通过外键 Dept_id 找到对应的部门,然后才能找到部门表里的各种字段信息,从而让二者相关联。所以说,外键一定是在从表中创建,从而找到与主表之间的联系;从表负责维护二者之间的关系。

二、外键使用满足条件

     1. 两张表必须都是 InnoDB 表,并且它们没有临时表。

      注:InnoDB 是数据库的引擎。MySQL 常见引擎有两种:InnoDB 和 MyISAM,后者不支持外键。

      2. 建立外键关系的对应列必须具有相似的 InnoDB 内部数据类型。

      3. 建立外键关系的对应列必须建立了索引。

      4. 假如显式的给出了 CONSTRAINT symbol,那 symbol 在数据库中必须是唯一的。假如没有显式的给出,InnoDB 会自动的创建。

三、面试题:你的数据库用什么存储引擎?区别是?

      答案:常见的有 MyISAM 和 InnoDB。

      MyISAM:不支持外键约束。不支持事务。对数据大批量导入时,它会边插入数据边建索引,所以为了提高执行效率,应该先禁用索引,在完全导入后再开启索引。

      InnoDB:支持外键约束,支持事务。对索引都是单独处理的,无需引用索引。

      CONSTRAINT symbol:可以给这个外键约束起一个名字,有了名字,以后找到它就很方便了。如果不加此参数的话,系统会自动分配一个名字。

      FOREIGN KEY:将从表中的字段 1 作为外键的字段。

      REFERENCES:映射到主表的字段 2。

      ON DELETE后面的四个参数:代表的是当删除主表的记录时,所做的约定。

           RESTRICT(限制):如果你想删除的那个主表,它的下面有对应从表的记录,此主表将无法删除。

           CASCADE(级联):如果主表的记录删掉,则从表中相关联的记录都将被删掉。

           SET NULL:将外键设置为空。

           NO ACTION:什么都不做。

     注:一般是RESTRICTCASCADE用的最多。

四、拓展阅读 MySQL 数据表中带 OR 的多条件查询


OR 关键字可以联合多个条件进行查询。使用 OR 关键字的条件:

1) 只要符合这几个查询条件的其中一个条件,这样的记录就会被查询出来。

2) 如果不符合这些查询条件中的任何一条,这样的记录将被排除掉。

4.1 语法格式

OR 关键字的基本语法格式如下:

条件表达式 1 OR 条件表达式 2 [...OR 条件表达式 n]

OR 可以连接两个条件表达式,同时可以使用多个 OR 关键字,以连接更多的条件表达式。

4.2 实例

4.2.1 实例 1

使用 OR 关键字查询 employee 表中 d_id 为 1001,或者 sex 为'男'的记录。SELECT 语句的代码如下:

SELECT * FROM employee WHERE d_id=1001 OR sex LIKE '男';
复制代码

可将 d_id 为 1001 的记录被查询了出来,同时,sex 为'男'的记录也被查询了出来。

这说明,使用 OR 关键字时,只要符合多个条件中的任意一个条件,就可以被查询出来。

4.2.2 实例 2

使用 OR 关键字查询 employee 表中的记录。查询条件为 num 取值在(1,2,3)集合中,或者 age 的范围为 24~26,或者 homeaddress 的取值中包含“厦门市”。SELECT 语句的代码如下:


SELECT * FROM employee WHERE
         num IN(1,2,3) OR age BETWEEN 24 AND 26
         OR homeaddress LIK '%厦门市%';
复制代码

结果显示,只要符合这 3 个条件表达式中的任意一个条件,这样的记录就会被查询出来。


OR 可以和 AND 一起使用。当两者一起使用时,AND 要比 OR 先运算。

4.2.3 实例 3

使用 OR 和 AND 关键字查询 employee 表中的记录。SELECT 语句的代码如下:

SELECT * FROM employee WHERE num IN(1,3,4) AND age=25 OR sex='女';
复制代码


结果显示,只要符合 num IN(1,3,4) AND age=25 的记录或者符合 sex='女'的记录都被显示了出来。

如果将条件的顺序换一下,将 SELECT 语句变成下面的情况:

SELECT * FROM employee WHERE sex='女' OR num IN(1,3,4) AND age=25;

结果显示,与前面的 SELECT 语句的执行结果是一样的。

这说明,AND 关键字前后的条件先结合,然后再与 OR 关键字的条件相结合。也就是说,AND 要比 OR 先运算。

4.2.4 提示

AND 和 OR 关键字可以连接条件表达式。这些条件表达式中可以使用“=”、“>”等操作符,也可以使用 IN、BETWEEN AND 和 LIKE 等关键字,而且,LIKE 关键字匹配字符串时可以使用“%”和“_”等通配符。


发布于: 刚刚阅读数: 4
用户头像

No Silver Bullet 2021.07.09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
MySQL进阶(一)主外键讲解_MySQL 数据库_No Silver Bullet_InfoQ写作社区