日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql cluster 外键_Mysql外键约束

發(fā)布時(shí)間:2023/12/2 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql cluster 外键_Mysql外键约束 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。