MySQL的外键
什么是外键,很简单保持数据一致性的一个约束键。如果你有两张表,第一张是学生表,第二张表是一个成绩表,我们来看看保持数据一致性,其实在Django等框架的模型中中也能做关联获取对象。
第一张表 成绩表
第二张表 学生表
保持数据一致性
我们来看看,当键不一致的时候,数据是插不进去的哦,保证了数据一致性。
mysql> insert into student(sid,name) values("A0004","Tom");
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`school`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`sid`) REFERENCES `score` (`sid`))
mysql> insert into student(sid,name) values("A0001","Tom");
Query OK, 1 row affected (0.00 sec)
mysql> insert into student(sid,name) values("A0002","Bill");
Query OK, 1 row affected (0.01 sec)
mysql> insert into student(sid,name) values("A0003","Jill");
Query OK, 1 row affected (0.00 sec)
高级查询
还是用上面两张表做例子
连接查询
内连接
没有on条件的时候就是笛卡尔积,有条件的时候按照条件执行,条件关键字on,使用where也可以,但是效率会低很多;
select * from student join score on student.sid=score.sid;
外链接
与内连接相似,但是条件不匹配的项会保留,不匹配字段填写NULL,作何有值得的是以谁为主表
我们做个测试,为了体现不匹配的样子,先向score插入一条数据
insert into score(sid,value) values("A0004",90);
内连接的状态的
左连接
左表为主
select * from score left join student on student.sid=score.sid;
右连接
右表为主
select * from student right join score on student.sid=score.sid;
交叉连接
循环去每一条数据进行匹配,结果是笛卡尔积
select * from student cross join score;
#或者
select * from student,score;
自然连接
略