MySql Cluster 中实现外键功能

原创 2012年03月30日 09:16:36

目前MySQL 集群存储引擎(ndbcluster)ndb-7.2.4版本不支持外键。
如果想在MySQL 集群中使用外键可通过触发器来实现。

MySql Cluster Version:

ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=3    @127.0.0.1  (mysql-5.5.19 ndb-7.2.4, Nodegroup: 0, Master)
id=4    @127.0.0.1  (mysql-5.5.19 ndb-7.2.4, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @127.0.0.1  (mysql-5.5.19 ndb-7.2.4)

[mysqld(API)]   2 node(s)
id=50   @127.0.0.1  (mysql-5.5.19 ndb-7.2.4)
id=51 (not connected, accepting connect from any host)


a)创建一个存储错误信息的表

CREATE TABLE error_msg 
(error_msg VARCHAR(32) NOT NULL PRIMARY KEY)ENGINE=NDB;
INSERT INTO error_msg VALUES (‘Foreign Key Constraint Violated!’);

b) 创建主表

CREATE TABLE ndb_parent
(
 nparent_id INT NOT NULL,
 PRIMARY KEY (nparent_id)
) ENGINE=NDB;

c)创建子表
CREATE TABLE ndb_child
(
 nparent_id INT NOT NULL,
 nchild_id INT NOT NULL,
 PRIMARY KEY (nparent_id, nchild_id)
) ENGINE = NDB;

d)创建触发器
CREATE TRIGGER insert_ndb_child
  BEFORE INSERT
  ON ndb_child
  FOR EACH ROW
  BEGIN
    IF (SELECT COUNT(*) FROM ndb_parent WHERE nparent_id=new.nparent_id)= 0
    THEN
      INSERT error_msg VALUES ('Foreign Key Constraint Violated!');
    END IF;
  END;

e) 测试先在主表插入记录,后在子表插入记录。可以插入成功。
INSERT INTO ndb_parent VALUES (1), (2), (3);
INSERT INTO ndb_child VALUES (1,1), (1,2), (2,1), (2,2), (2,3), (3,1);

如果子表中插入的记录在主表中不存在会出现错误。
INSERT INTO ndb_child VALUES (4,1);
[SQL] INSERT INTO ndb_child VALUES (4,1);
[Err] 1062 - Duplicate entry 'Foreign Key Constraint Violated!' for key 'PRIMARY'


参考文档:http://dev.mysql.com/tech-resources/articles/mysql-enforcing-foreign-keys.html

mysql cluster的常见问题

MySQL Cluster是MySQL适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster存储引擎,允许在1个Cluster中运行多个MySQL服务器。 MySQL Cl...
  • chenxingzhen001
  • chenxingzhen001
  • 2012年06月12日 09:23
  • 8256

2016.11.10 MySQL外键约束不能建表

MySQL外键无法建表
  • u012845311
  • u012845311
  • 2017年03月21日 21:32
  • 171

Mysql无法创建外键的原因

在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因。 1. 两个字段的类型或者大小不严格匹配。例如,如果一个...
  • wangpeng047
  • wangpeng047
  • 2014年02月26日 11:09
  • 26983

mysql ndbcluster集群复制到innodb单机环境配置搭建

mysql ndbcluster集群复制到innodb单机环境配置搭建 1.环境准备 一套ndbcluster集群环境 一套innodb单机环境 ndbcluster环境配置 IP:192....
  • weiwangsisoftstone
  • weiwangsisoftstone
  • 2016年04月28日 17:15
  • 1329

MySQL Cluster数据分布和分区

数据分布 MySQL Cluster自动分区数据表(也可能使用用户自定义分区),将数据分布到分区中.一个数据表被划分到多个Data Node分区中,数据在分区中被”striped”主键的hash...
  • YABIGNSHI
  • YABIGNSHI
  • 2015年08月18日 13:20
  • 1267

MySQL中利用外键实现级联删除、更新

  • 2012年11月07日 13:08
  • 33KB
  • 下载

mysql数据库中外键的级联删除功能

转自:http://www.chinaunix.net/old_jh/17/462977.html作者:Dirk (dirk.ye AT gmail.com)  Url:http://dirk.pdx...
  • dahailantian1
  • dahailantian1
  • 2017年11月20日 17:46
  • 63

[置顶] Mysql DBMigrate Class -- 增加外键支持功能

简化 这个步骤: 在程序运行时动态增加表 以及建立表的关系 结构
  • vb2005xu
  • vb2005xu
  • 2016年08月25日 17:00
  • 74

mysql外键设置

  • 2012年08月29日 09:43
  • 5KB
  • 下载

mysql中利用外键实现级联删除,更新

MySQL中利用外键实现级联删除、更新 MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。 在创建索引的...
  • taylor_cao
  • taylor_cao
  • 2018年01月09日 18:10
  • 10
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySql Cluster 中实现外键功能
举报原因:
原因补充:

(最多只允许输入30个字)