物理外键:某张表的字段使用foreignkey作为外键关联另外一张表、字段。并且限定引擎为inno DB;
逻辑外键:又叫事物外键,不使用foreignkey,使用语法(代码)上产生逻辑关联而产生的外键;
两张表使用物理外键进行关联:
1 已有一张表为Persons表,表结构为 P_Id LastName FirstName Address City; 2 创建一个带有外键的Order表 CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, PRIMARY KEY (O_Id), FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) ) 此时使用navicat查看时,会更明显看到有个foreignkey的标识, 查询起来可以更方便的联表查询,通过外键可以直接调用另一张表的查询。
两张表使用逻辑外键进行关联:
1 已有一张表为Persons表,表结构为 P_Id LastName FirstName Address City; 2 创建一个带有外键的Order表 CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int ) 此时使用navicat查看时,不会看到foreignkey的标识,此时两张表从数据库的角度看是毫无关联的。 其中Orders表的P_Id 与 Persions表的 P_Id 是有关联关系,增删改查上都是有关系的,而这种关系是通过代码逻辑层面进行控制。所以叫逻辑外键。
从维护上来看,逻辑外键由于需要使用代码来进行维护,好像更麻烦;物理外键无需代码维护直接使用mysql自身维护,好像更简单。
如果数据量上去后,使用物理外键会大大的降低性能,特别是出现死锁情况。