mysql多表查询的小问题

表与表之间一般存在三种关系,即一对一,一对多,多对多关系。 下面看下数据库里的表结构

clipboard.png

我的数据库里表的结构是这样的,Orderitem里的值做为外键分别指向product_1和orders表里的主键,由于这种对应关系我可以通过orderitem里的外键的值来查到对应product主表里对应的主键的值,但是现在问题来了,在图里有一张没有任何关联的User表,我是这样来写我的SQL语句的

SELECT * FROM product_1,user WHERE user.uid=product_1.pid

这样成功的根据User表里对应UID的值来查到product表里Pid对应的值,

问题:既然User表和product表没有对应关系,为什么运行SQL语句可以查到值呢,既然可以查到值,又为什么要建立主外键的对应关系?求解答

回答:

1、外键首先是键,有键即意味逻辑上的引用关系,通常会有索引,查询会更快;
2、其次是约束, 避免插入一些不合理的数据,需要另一个表的ID, 但另一表里没有数据,如果允许这样的话,应用层面需要做不断地做检查;
3、可以实现一些高级操作,如级联更新和级联删除等,这也正是外键带来的好处;
4、一些ORM框架自动为外键生成相应的增删改查的对应函数,方便和简化数据库的使用;
5、批量导入数据时自动会检查,但要注意表的引用关系和导入的先后顺序,如果有循环引用或自指,要先停掉约束检查,这是外键带来的不方便的副作用。

至于题主说的没外键也能按一定条件查到数据,这没有什么好奇怪的吧,只要是合乎sql的语法,什么条件数据库都会接受,不管在业务逻辑上是否存在合理性。正如题主的例子,user.id=product.id也没什么可怕的,如果能给个解释的话...

回答:

外键约束主要用来维护两个表之间数据的一致性。其实大多数情况我都不建立外键的,自己有一个总体意识就行了。sql语句跟外键没有关系

回答:

个人建议不要加外键 有级联的效率问题 关联在业务层做
当然 要是程序员水平过低 还是加上外键 不然 总是忘了修改关联的表就死了

回答:

user.uid=product_1.pid 这就是这俩表的关系。

如果不是这个关系的话,可能只是数据凑巧对上而已。

以上是 mysql多表查询的小问题 的全部内容, 来源链接: utcz.com/p/175006.html

回到顶部