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
:什么都不做。
注:一般是RESTRICT
和CASCADE
用的最多。
四、拓展阅读 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 语句的代码如下:
可将 d_id 为 1001 的记录被查询了出来,同时,sex 为'男'的记录也被查询了出来。
这说明,使用 OR 关键字时,只要符合多个条件中的任意一个条件,就可以被查询出来。
4.2.2 实例 2
使用 OR 关键字查询 employee 表中的记录。查询条件为 num 取值在(1,2,3)集合中,或者 age 的范围为 24~26,或者 homeaddress 的取值中包含“厦门市”。SELECT 语句的代码如下:
结果显示,只要符合这 3 个条件表达式中的任意一个条件,这样的记录就会被查询出来。
OR 可以和 AND 一起使用。当两者一起使用时,AND 要比 OR 先运算。
4.2.3 实例 3
使用 OR 和 AND 关键字查询 employee 表中的记录。SELECT 语句的代码如下:
结果显示,只要符合 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 关键字匹配字符串时可以使用“%”和“_”等通配符。
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/e85bd76dd93c431c080c94590】。文章转载请联系作者。
评论