mysql cluster 外键_Mysql外键约束
Mysql集群創(chuàng)建外鍵,分為四種約束:no action,restrict,cascade,set null。如果表A的主關(guān)鍵字是表B中的字段,則該字段稱為B的外鍵,表A稱為主表,表B稱為從表。外鍵是用來實(shí)現(xiàn)參照完整性的,不同的外鍵不同的外鍵約束方式將可以使兩張表緊密的結(jié)合起來,特別是修改或者刪除的級(jí)聯(lián)操作將使得日常的維護(hù)工作更加輕松。
CASCADE: 從父表刪除或更新且自動(dòng)刪除或更新子表中匹配的行。
·??SET NULL: 從父表刪除或更新行,并設(shè)置子表中的外鍵列為NULL。
·??NO ACTION: 在ANSI SQL-92標(biāo)準(zhǔn)中,NO ACTION意味這不采取動(dòng)作,就是如果有一個(gè)相關(guān)的外鍵值在被參考的表里,刪除或更新主要鍵值的企圖不被允許進(jìn)行(Gruber, 掌握SQL, 2000:181)。 InnoDB拒絕對(duì)父表的刪除或更新操作。
RESRICT:同no action。
環(huán)境模擬:
先來添加兩張表:ta_resource和ta_resourcetime。
DROP TABLE IF EXISTS `ta_resource`;
CREATE TABLE `ta_resource` (
`ResourceId` varchar(64) NOT NULL,
`ResourcePId` varchar(64) DEFAULT NULL,
`ResourceName` varchar(64) DEFAULT NULL,
`Type` varchar(64) DEFAULT NULL,
`Desc` varchar(512) DEFAULT NULL,
`Priority` smallint(6) DEFAULT NULL,
`IsFold` varchar(2) DEFAULT NULL,
`IsUse` varchar(2) DEFAULT NULL,
`URL` varchar(64) DEFAULT NULL,
`Icon` varchar(512) DEFAULT NULL,
`Css` varchar(64) DEFAULT NULL,
`JavaScript` varchar(64) DEFAULT NULL,
`TimeSpan` datetime DEFAULT NULL,
`IsDefault` varchar(2) DEFAULT NULL,
PRIMARY KEY (`ResourceId`)
) ENGINE=ndbcluster DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for `ta_resourcetime`
-- ----------------------------
DROP TABLE IF EXISTS `ta_resourcetime`;
CREATE TABLE `ta_resourcetime` (
`TimeId` varchar(64) NOT NULL,
`ResourceId` varchar(64) NOT NULL,
`ResourceName` varchar(64) DEFAULT NULL,
`RoleId` varchar(64) NOT NULL,
`RoleName` varchar(64) DEFAULT NULL,
`URL` varchar(64) DEFAULT NULL,
`StartTime` datetime NOT NULL,
`EndTime` datetime NOT NULL,
`IsDeleted` varchar(2) DEFAULT NULL,
`Desc` varchar(512) DEFAULT NULL,
PRIMARY KEY (`TimeId`),
KEY `ResourceId` (`ResourceId`),
CONSTRAINT `resourceid` FOREIGN KEY (`ResourceId`) REFERENCES `ta_resource` (`ResourceId`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=ndbcluster DEFAULT CHARSET=utf8;
1、no action時(shí)
這兩個(gè)表中的外鍵使用的是ON DELETE NO ACTION ON UPDATE NO ACTION
如果更改數(shù)據(jù)時(shí), ta_resource是主表,ta_resourcetime是從表。
更新數(shù)據(jù)時(shí):可以修改主表,但是不可以修改從表的數(shù)據(jù)。
刪除數(shù)據(jù)時(shí):先刪除從表,再刪除主表。
2、cascade時(shí)
集群搭建完再插入數(shù)據(jù)庫表時(shí),在on delete 和on update 都使用cascade時(shí)遇到了這樣的問題:不能添加外鍵約束。
之前以為是mysql集群不支持外鍵,在網(wǎng)上查了mysql集群該版本支持外鍵約束和師哥們討論過這個(gè)問題,表示mysql集群支持外鍵約束。于是經(jīng)過多次實(shí)踐,找到出現(xiàn)這種問題的原因:mysql集群中支持使用cascade,但是on delete 和on update只能有一個(gè)使用cascade,另一個(gè)使用no action就可以。
3、內(nèi)存不足
出現(xiàn)的問題:插入不進(jìn)去數(shù)據(jù),經(jīng)過查詢,是由于內(nèi)存不足
解決方法:
在配置文件config.ini中對(duì)內(nèi)存進(jìn)行設(shè)置,主要對(duì)這幾項(xiàng)進(jìn)行設(shè)置:
MaxNoOfTables=10240
設(shè)置集群中最大表對(duì)象數(shù)量
MaxNoOfAttributes=500000
設(shè)置可在集群中定義的屬性數(shù)量
MaxNoOfConcurrentTransactions=1000000
用于設(shè)定節(jié)點(diǎn)內(nèi)可能的并發(fā)事務(wù)數(shù)
MaxNoOfConcurrentOperations=1000000
設(shè)置能同時(shí)出現(xiàn)在更新階段或同時(shí)鎖定的記錄數(shù)
MaxNoOfOrderedIndexes=10240
設(shè)置有序索引的總數(shù)
如果不配置這些,mysql集群中會(huì)默認(rèn)內(nèi)存的大小,當(dāng)內(nèi)存滿了以后就插不進(jìn)去數(shù)據(jù)了。
總結(jié)
以上是生活随笔為你收集整理的mysql cluster 外键_Mysql外键约束的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql optimizer_mysq
- 下一篇: linux中mysql导入数据库命令_l