MySQL数据库入门--读书笔记(五)

第五章

外键:有外键的那个表是从表,另一个是主表;被引用的那个列应该具有主键约束或唯一性约束。建立外键的表必须是InnoDB,不能是临时表,因为mysql中只有InnoDB类型的表才支持外键

添加外键约束:

alter table 表名 constraintFK_ID foreign key (外键字段名) references 外键表名 (主键字段名);

[on delete {cascade | set null | no action | restrict }]

[on update {cascade | set null | no action | restrict }]

alter tablestudent add constraint FK_ID foreign key (gid) references grade (id);

cascade:删除包含与已删除键值有参照关系的所有记录

set null:修改包含与已删除键值有参照关系的所有记录,使用null值替换(不能用于已标记为not null的字段)

no action:不进行任何操作

restrict:拒绝主表删除或修改外键关联列。(在不定义on delete和no update子句时,这是默认设置,也是最安全的设置)

删除外键约束:

         altertable 表名 drop foreign key 外键名;

         altertable student drop foreign key FK_ID;

关联关系:

         多对一(员工对部门)、多对多(学生对选修课)、一对一(个人对身份证)

添加数据:

         添加数据时,要先为主表添加数据,然后为从表添加数据

删除数据:

         删除数据时,要先删除从表数据,再删除主表数据

连接查询:

         交叉连接:

                  select* from 表名1 cross join 表名2        ;

                  select* from from department cross join employee;

         内连接:

                  select查询字段 from 表1 [inner] join 表2 on 表1.关系字段=表2.关系字段;

                  selectdepartment.dname,employee.name from department [inner] join employee ondepartment.did=employee.id;

         自连接查询:查询自己所在的那个部门还有哪些员工

         selectp1.* from employee p1 join employee p2 on p1.did=p2.did where p2.name=’Jim’;

         外连接:

                  左连接:返回包括左表中的所有记录和右表中符合连接条件的记录

                          selectdepartment.did,department.dname,employee.name from department left joinemployee on department.did=employee.did;

                  右连接:返回包括右表中的所有记录和坐标中符合连接条件的记录

                         select department.did,department.dname,employee.namefrom department right join employee on department.did=employee.did;

         符合条件连接查询:将内连接查询结果按照年龄排序

                  selectemployee.name,employee.age,department.dname from department join employee ondepartment.did=employee.did order by age;

         子查询:

                  带in关键字的子查询:

select * from department where did [not] in(select did from employeewhere age=20;);

                  带exists关键字的子查询:

                          select* from department where exists(select did from employee where age>21);

                  带any关键字的子查询:只要外面查询出的值大于子查询出来的任意一个值,就返回

                          select* from department where did>any(select did from emplyee);

                  带all关键字的子查询:只有外面查询出来的大于全部子查询出来的值,才返回

                          select* from department where did>all(select did from employee);

                  带比较运算符的子查询:

                          select* from department where did=(select did from employee where name=’zhaosi’);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值