主键、外键和索引的区别
主键 | 外键 | 索引 | |
---|---|---|---|
定义: | 唯一标识一条记录,不能有重复的,不允许为空 | 表的外键是另一表的主键, 外键可以有重复的, 可以是空值,外键一定是至少涉及到两张表 | 该字段没有重复值,但可以有一个空值 |
作用: | 用来保证数据完整性 | 用来和其他表建立联系用的 | 是提高查询排序的速度 |
个数: | 主键只能有一个 | 一个表可以有多个外键 | 一个表可以有多个惟一索引 |
主表和从表
主表
在数据库中建立的表格即Table,其中存在主键(primary key)用于与其它表相关联,并且作为在主表中的唯一性标识。
有外键的表,一般都是主表
从表
以主表的主键(primary key)值为外键 (Foreign Key)的表,可以通过外键与主表进行关联查询。从表与主表通过外键进行关联查询。
关系及用法概述
从表数据依赖于主表,一般最后查询数据时把主表与从表进行关联查询。主表可用于存储主要信息,如客户资料(客户编号,客户名称,客户公司,客户单位等),从表用来存储客户扩展信息(客户订单信息,客户地址信息,客户联系方式信息等)
相关列子和联合查询
简单举例:
主表(用户信息)
table user
userid numeric(0,20)
username varchar2(20)
usercompany varchar2(50)
从表(用户订单)
table uorder
orderid numeric(0,20)
uid numeric(0,20)
ordertime date
orderstate char(1)
要对主表和从表进行信息联合查询语句简单如下:
select * from user u inner join uorder o on u.userid=o.uid
很简单就是 一对多的关系
一是主表
多是从表
tp5联合查询
public function blogs()
{
//以blogs为主表
$res = Db::name(‘blogs‘)
->alias("a") //取一个别名
//与category表进行关联,取名i,并且a表的categoryid字段等于category表的id字段
->join(‘category i‘, ‘a.categoryid = i.id‘)
->join(‘user u‘, ‘a.authorid = u.id‘)
//想要的字段
->field(‘a.id,a.title,a.content,u.username,a.createtime,i.category,a.look,a.like‘)
//查询
->select();
return json($res);
}
}