我有一个使用InnoDB表类型和外键的模式。 我打算使用mysql Cluster,我只是想确保我可以使用“InnoDB”表类型,外键约束仍然有效。
更新
根据文件:
可以使用创建表 其他存储引擎(如MyISAM 或MySQLo服务器上的InnoDB) 与MySQL Cluster一起使用,但这些 非NDB表不参与 聚类;每个这样的表是 严格本地MySQL个人 它所在的服务器实例 创建
这是否意味着如果我创建一个InnoDB表,我可以有外键约束?我理解这些表不会参与聚类。
答案 0 :(得分:6)
不,他们都使用NDBCLUSTER
作为存储引擎,并在5.6 / MySQL Cluster NDB 7.3之前使用foreign key constraints are not available 。从MySQL Cluster NDB 7.3 foreign keys are possible开始。
不参与群集的表可以是InnoDB(或任何其他),但只是服务器的本地(即其他服务器不知道该表),因此只能在其中一个表上查询该表。节点(哪种方式会破坏聚类的优势)。
当然,引擎的所有功能都是可用的,所以InnoDB表确实可以有外键约束,但InnoDB<> NDB也适用相同的规则作为InnoDB<> MyISAM:MySQL不会抱怨您在InnoDB表定义中提到位于NDB / MyISAM表中的列,但也不会强制执行完整性。
答案 1 :(得分:2)
可以在NDB(或任何本身不支持它们的mysql存储引擎)中以编程方式强制执行外键: http://dev.mysql.com/tech-resources/articles/mysql-enforcing-foreign-keys.html
或者,如果您可以等待MySQL Cluster 7.3: https://blogs.oracle.com/MySQL/entry/mysql_cluster_7_3_labs
答案 2 :(得分:0)
MySQL集群不支持外键,因为强加外键约束可能会降低集群的性能。您可以设计数据库,使数据库上的操作能够保持所需的检查。