mysql外键查询_MySQL数据库学习笔记(六)----MySQL多表
mid截取函数的使用方法查询之外键、表连接。。。
本章主要内容:
⼀、外键
⼆、表连接
三、⼦查询
四、索引
⼀、外键:
1、什么是外键
2、外键语法
3、外键的条件
4、添加外键
5、删除外键
1、什么是外键:
主键:是唯⼀标识⼀条记录,不能有重复的,不允许为空,⽤来保证数据完整性
外键:是另⼀表的主键, 外键可以有重复的, 可以是空值,⽤来和其他表建⽴联系⽤的。所以说,如果谈到了外键,⼀定是⾄少涉及到两张表。例如下⾯这两张表:
上⾯有两张表:部门表(dept)、员⼯表(emp)。Id=Dept_id,⽽Dept_id就是员⼯表中的外键:因为员⼯
表中的员⼯需要知道⾃⼰属于哪个部门,就可以通过外键Dept_id到对应的部门,然后才能到部门表⾥的各种字段信息,从⽽让⼆者相关联。所以说,外键⼀定是在从表中创建,从⽽到与主表之间的联系;从表负责维护⼆者之间的关系。
我们先通过如下命令把部门表和职⼯表创建好,⽅便后⾯的举例:
create tabledepartment(
idint primary keyauto_increment,
namevarchar(20) not null,
descriptionvarchar(100)
);create tableemployee(
idint primary keyauto_increment,
namevarchar(10) not null,
gendervarchar(2) not null,
salaryfloat(10,2),
ageint(2),
gmrint,
dept_idint);
然后把两张表的数据填好,显⽰效果如下:
部门表:
员⼯表:
2、外键的使⽤需要满⾜下列的条件:(这⾥涉及到了InnoDB的概念)
awk函数1. 两张表必须都是InnoDB表,并且它们没有临时表。
注:InnoDB是数据库的引擎。MySQL常见引擎有两种:InnoDB和MyISAM,后者不⽀持外键。
2. 建⽴外键关系的对应列必须具有相似的InnoDB内部数据类型。
3. 建⽴外键关系的对应列必须建⽴了索引。mysql语句多表查询
4. 假如显式的给出了CONSTRAINT symbol,那symbol在数据库中必须是唯⼀的。假如没有显式的给出,InnoDB会⾃动的创建。
⾯试题:你的数据库⽤什么存储引擎?区别是?
答案:常见的有MyISAM和InnoDB。
MyISAM:不⽀持外键约束。不⽀持事务。对数据⼤批量导⼊时,它会边插⼊数据边建索引,所以为了提⾼执⾏效率,应该先禁⽤索引,在完全导⼊后再开启索引。
InnoDB:⽀持外键约束,⽀持事务。对索引都是单独处理的,⽆需引⽤索引。
3、添加外键的语法:
有两种⽅式:
⽅式⼀:在创建表的时候进⾏添加
⽅式⼆:表已经创建好了,继续修改表的结构来添加外键
【⽅式⼀】在创建表的时候进⾏添加
[CONSTRAINT symbol] FOREIGN KEY [id](从表的字段1)REFERENCEStbl_name (主表的字段2)[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}
上⾯的代码是同⼀⾏,中括号⾥的内容是可选项。
解释如下:
CONSTRAINT symbol:可以给这个外键约束起⼀个名字,有了名字,以后到它就很⽅便了。如果不加此参数的话,系统会⾃动分配⼀个名字。
FOREIGN KEY:将从表中的字段1作为外键的字段。
REFERENCES:映射到主表的字段2。
ON DELETE后⾯的四个参数:代表的是当删除主表的记录时,所做的约定。
RESTRICT(限制):如果你想删除的那个主表,它的下⾯有对应从表的记录,此主表将⽆法删除。
CASCADE(级联):如果主表的记录删掉,则从表中相关联的记录都将被删掉。
SET NULL:将外键设置为空。
NO ACTION:什么都不做。
注:⼀般是RESTRICT和CASCADE⽤的最多。
【⽅式⼆】表已经创建好了,继续修改表的结构来添加外键。
我们在第⼀段中内容中已经将表建好了,数据也填充完了,现在来给从表(员⼯表)添加外键,让它与主表(部门表)相关联。代码举例如下:
ALTER TABLE employee ADD FOREIGN KEY(dept_id) REFERENCES department(id);
代码解释:
ALTER TABLE employee:在从表employee中进⾏操作;
ADD FOREIGN KEY(dept_id):将从表的字段dept_id添加为外键;
REFERENCES department(id):映射到主表department当中为id的字段。
运⾏上⽅代码后,我们通过navicat来看⼀下外键有没有添加成功:
上图中,选中表employee,单击红框部分的“设计表”按钮,界⾯如下:
hashset的用法上图中就可以看到我们新建的外键了,⽽且系统默认给这个外键起了个名字:employee_ibfk_1。默认规则是RESTRICT。紧接着来给外键设置值:
上图中,我们打开员⼯表,然后给外键设置值,1代表宣传部,2代表秘书部。
然后我们回到主表(部门表),此时如果想删除id为1的宣传部,会弹出如下提⽰:(因为外键的默认规则为RESTRICT)
4、删除外键:(通过sql语句的⽅式)
我们在navicat中可以通过图形界⾯的⽅式删除外键,也可以通过sql语句来删除。
(1)获取外键名:
如果在命令⾏中不知道外键的名字,可以通过查看表的定义出外键的名称:
show create table emp;
运⾏效果如下:
其实我们在表的信息中也可以看到:(注意书写命令的格式)
(2)删除外键:
alter table emp drop foreign key 外键名;
provisions⼆、表连接(join)
我们以下⾯的两张表举例:作为本段内容的例⼦
department部门表:
java软件开发工资employee员⼯表:
其中,外键对应关系为:employee.dept_id=department.id。employee.leader中的数字的含义为:⽣命壹号的leader是⽣命⼆号,⽣命⼆号没有leader,⽣命叁号的leader是⽣命壹号。
1、内连接:只列出匹配的记录
语法:
SELECT … FROMjoin_table[INNER] JOINjoin_table2[ON join_condition]
WHERE where_definition
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论