我有一个架构,使用InnoDB表类型和外键。 我打算使用mysql集群,我只是想确保我可以使用“InnoDB”表类型,并且外键约束仍然有效。外键和集群
更新:
作为每文档:
是可能的MySQL服务器上创建使用 其它存储引擎(如MyISAM 或InnoDB的)表正在使用 与一个MySQL簇,但这些 非NDB表不参与 聚类;每个这样的表格是 ,严格限制在个人的MySQL 服务器实例上,它创建的是 。
这是否意味着如果我创建一个InnoDB表,我可以有外键约束?我知道这些表格不会参与群集。
我有一个架构,使用InnoDB表类型和外键。 我打算使用mysql集群,我只是想确保我可以使用“InnoDB”表类型,并且外键约束仍然有效。外键和集群
更新:
作为每文档:
是可能的MySQL服务器上创建使用 其它存储引擎(如MyISAM 或InnoDB的)表正在使用 与一个MySQL簇,但这些 非NDB表不参与 聚类;每个这样的表格是 ,严格限制在个人的MySQL 服务器实例上,它创建的是 。
这是否意味着如果我创建一个InnoDB表,我可以有外键约束?我知道这些表格不会参与群集。
不,他们全都使用NDBCLUSTER
作为存储引擎,而foreign key constraints are not available之前是5.6/MySQL Cluster NDB 7.3。从MySQL Cluster NDB 7.3 foreign keys are possible开始。
不参与集群的表可以是InnoDB(或任何其他的),但仅对服务器是本地的(即其他服务器不知道该表),所以只能查询其中的一个表节点(这种类型击败了聚类的优点)。当然,InnoDB表可以有外键约束,但InnoDB的InnoDB应用相同的规则> InnoDB <> MyISAM:MySQL不会抱怨,如果你在InnoDB表定义中提到位于NDB/MyISAM表中的列,但不会强制完整性。
MySQL集群不支持外键,因为强加外键约束可能会降低集群的性能。您可以设计数据库,使数据库上的操作可以保持所需的检查。
有可能以编程方式强制执行NDB外键(或任何MySQL的存储引擎,它本身并不支持它们): http://dev.mysql.com/tech-resources/articles/mysql-enforcing-foreign-keys.html
或者,如果你能等待MySQL集群7.3: https://blogs.oracle.com/MySQL/entry/mysql_cluster_7_3_labs
什么是你的问题吗?据我所知InnoDB中没有外键。 –
其实在InnoDB中有外键:) –
InnoDB **具有**完整的参照完整性。这是MyISAM,它是低效的。 – Dirk