MySql Cluster 中实现外键功能

目前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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值