CASCADE: 從父表刪除或更新且自動刪除或更新子表中匹配的行。
·SET NULL: 從父表刪除或更新行,并設置子表中的外鍵列為NULL。
·NO ACTION: 在ANSI SQL-92標準中,NO ACTION意味這不采取動作,就是如果有一個相關的外鍵值在被參考的表里,刪除或更新主要鍵值的企圖不被允許進行(Gruber, 掌握SQL, 2000:181)。 InnoDB拒絕對父表的刪除或更新操作。
RESRICT:同no action。
環境模擬:
先來添加兩張表: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時
這兩個表中的外鍵使用的是ON DELETE NO ACTION ON UPDATE NO ACTION
如果更改數據時, ta_resource是主表,ta_resourcetime是從表。
更新數據時:可以修改主表,但是不可以修改從表的數據。
刪除數據時:先刪除從表,再刪除主表。
2、cascade時
集群搭建完再插入數據庫表時,在on delete 和on update 都使用cascade時遇到了這樣的問題:不能添加外鍵約束。
之前以為是mysql集群不支持外鍵,在網上查了mysql集群該版本支持外鍵約束和師哥們討論過這個問題,表示mysql集群支持外鍵約束。于是經過多次實踐,找到出現這種問題的原因:mysql集群中支持使用cascade,但是on delete 和on update只能有一個使用cascade,另一個使用no action就可以。
3、內存不足
出現的問題:插入不進去數據,經過查詢,是由于內存不足
解決方法:
在配置文件config.ini中對內存進行設置,主要對這幾項進行設置:
MaxNoOfTables=10240
設置集群中最大表對象數量
MaxNoOfAttributes=500000
設置可在集群中定義的屬性數量
MaxNoOfConcurrentTransactions=1000000
用于設定節點內可能的并發事務數
MaxNoOfConcurrentOperations=1000000
設置能同時出現在更新階段或同時鎖定的記錄數
MaxNoOfOrderedIndexes=10240
設置有序索引的總數
如果不配置這些,mysql集群中會默認內存的大小,當內存滿了以后就插不進去數據了。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com