-
mysql一对多除了外建还可以用吗_MySql多对多关系中外键的应用
2021-01-19 02:14:01(外键,若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性)设计方案:方案一:建立一张用户基地表,与r_user与用户基地表,保持一对多的关系,如图所示,...业务需求:用户表r_user保存用户名等信息。现需要给每个用户设置工作基地,一个用户可以有多个工作基地,多个用户也可以有一个工作基地,即多对多关系。(外键,若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性)
设计方案:
方案一:建立一张用户基地表,与r_user与用户基地表,保持一对多的关系,如图所示,r_user的主键id做为r_user_base的外键user_id。通过r_user中的id,在r_user_base表中load该用户的所有工作基地。
方案二:建立一张个基地表base_info保存目前存在的所有基地,再建一张user_base关系表。如图所示,关系表user_base有两个外键user_id与base_id
方案一的特点是,只需要键一张表就可以完成业务需求。缺点是不够模块化,如果在其它地方还要用到基地信息,则还要再建基地表
方案二的特点是,用一张关系表连接两张信息表。便于信息表的维护与重复利用。
基于业务需求与以后扩展及重用性考虑,采用方案二实现需求。
在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。
外键的使用条件:
1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);
2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;
3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;
外键的定义语法:
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
cascade方式
在父表上update/delete记录时,同步update/delete掉子表的匹配记录
On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用 。
set null方式
在父表上update/delete记录时,将子表上匹配记录的列设为null
要注意子表的外键列不能为not null
On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用
No action方式
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
这个是ANSI SQL-92标准,从mysql4.0.8开始支持
Restrict方式
同no action, 都是立即检查外键约束
建立人员信息表:
1 CREATE TABLE`r_user` (2 `id` bigint(20) NOT NULLAUTO_INCREMENT,3 `NAME` varchar(20) DEFAULT NULL,4 `PASSWORD` varchar(50) DEFAULT NULL,5 `STAFF_NUM` varchar(20) DEFAULT NULL,6 `USER_NAME` varchar(20) DEFAULT NULL,7 PRIMARY KEY(`id`),8 ) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8
建立基地信息表
1 CREATE TABLE`branch_info` (2 `ID` bigint(20) NOT NULLAUTO_INCREMENT,3 `BRANCH_CODE` varchar(255) DEFAULT NULL,4 `BRANCH_DESC` varchar(255) DEFAULT NULL,5 PRIMARY KEY(`ID`)6 ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8
关系表:
1 CREATE TABLE`user_work_base` (2 `id` bigint(20) NOT NULLAUTO_INCREMENT,3 `version` int(11) NOT NULL,4 `user_id` bigint(20) NOT NULL,5 `base_id` bigint(20) NOT NULL,6 PRIMARY KEY(`id`),7 CONSTRAINT `user_work_base_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `r_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,8 CONSTRAINT `user_work_base_ibfk_2` FOREIGN KEY (`base_id`) REFERENCES `branch_info` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
9 ) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8
删除人员r_user表中人员A,关系表user_base自动删除A的关系数据。
如果外键使用Restrict方式,只删除A,则报错。
Cannot delete or update a parent row: a foreign key constraint fails (`maircrew`,`user_work_base`, CONSTRAINT `FK41EB46D32AA89EA0`
FOREIGN KEY (`user_id`) REFERENCES `r_user` (`id`))
-
mysql外建名是随机的吗_创建角色随机名字(mysql抽取随机记录)和mysql游标的使用_MySQL...
2021-01-20 01:17:32最近在开发中遇到了一些问题,...实现方法主要考虑使用mysql随机查询记录,在网上查了很多方案,然后用在了我们游戏中。实现方案是,将所有随机名字都插入到一张表中,然后从中随机取一条当前角色表中没有出现过的名...最近在开发中遇到了一些问题,在此记录一下解决的方法,已作备忘。
1、现在创建游戏角色的时候,基本上都是支持角色名字随机的,以前此功能在客户端用代码实现,然后向服务器请求并验证,后来发现有时候连续几次都失败,所以改成在服务器实现。实现方法主要考虑使用mysql随机查询记录,在网上查了很多方案,然后用在了我们游戏中。
实现方案是,将所有随机名字都插入到一张表中,然后从中随机取一条当前角色表中没有出现过的名字。
BEGIN
DECLARE randnum int DEFAULT 0;
SELECT FLOOR(RAND() * 309034) INTO randnum;
SELECT rname INTO _name FROM `names` WHERE ((_sex = sex) AND
(rname not in (SELECT Name FROM longwen.player WHERE _world = WorldID)) AND
(id > randnum)) LIMIT 1;
set returnvalue = 0;
END
2、接运营的需求,有时候因为服务器维护,需要给所有玩家送一些东西,这时候涉及离线玩家,所以我们的方案是静态写数据库。
因为对mysql没有深入研究过,在实践的过程中发现游标操作只能修改一条数据,后来查了很多资料,还是解决了问题,自己也学到了一点知识,修改后存储过程如下:
DECLARE _cursor CURSOR FOR
SELECT RoleID FROM player WHERE (RoleID NOT IN (SELECT roleID FROM email where LENGTH(datas) <> 0));
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' set _done = 1;
OPEN _cursor;
set _done = 0;
REPEAT
FETCH _cursor into _roleId;
replace into email(roleID, datas) values(_roleId, 'test');
UNTIL _done END REPEAT;
CLOSE _cursor;
修改前repeat里面有一条select语句。出现这个问题,主要是对SQLSTATE理解不够,02000异常有3种条件:
A:SELECT INTO 语句或 INSERT 语句的子查询的结果为空表。
B:在搜索的 UPDATE 或 DELETE 语句内标识的行数为零。
C:在 FETCH 语句中引用的游标位置处于结果表最后一行之后。
后来把select语句提出去放到游标声明语句里面就好了。
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉
本文系统来源:php中文网
TAG标签:游标角色名字
-
一个创造财富奇迹的时候,你想建一个网上购物系统,网络购物系统,在线购物系统,商城购物系统 ,网络购物系统吗...
2009-07-09 08:57:42电子商务网上购物网站自助建站管理系统,网络时代,一个电子商务的时代,一个创造财富奇迹的时候,你想建一个网上购物系统,网络购物系统,在线购物系统,商城购物系统 ,网络购物系统吗,你想用这个来创业吗? 购物系统,电子... -
上级对下级用通知合适吗_农村盖房子用“琉璃瓦”合适吗?它的优缺点是什么?看完不再纠结...
2020-12-27 12:22:14而关于农村自建房的问题也是越来越多的人关心了,毕竟房是家,是港湾,它的安全和实用,以及外观设计都是至关重要的,而修建屋顶时,瓦片的选择也是很多家庭纠结的一点,于是就有人在后台咨询小编,农村盖房子用琉璃...导读:农村盖房子用琉璃瓦合适吗?它的优缺点是什么?
在国家大力扶持下,农村有着翻天覆地的变化,一桩桩小洋楼拔地而起,而关于农村自建房的问题也是越来越多的人关心了,毕竟房是家,是港湾,它的安全和实用,以及外观设计都是至关重要的,而修建屋顶时,瓦片的选择也是很多家庭纠结的一点,于是就有人在后台咨询小编,农村盖房子用琉璃瓦合适吗?它的优缺点是什么?选择什么样材质的瓦才是最合适的呢?接下里小编就给大家一一解释,希望能让你不再纠结。
首先,农村盖房子也在逐步使用琉璃瓦,不过因为普通的琉璃瓦较容易碎裂,我们用的一般是改良了的琉璃瓦,也就是彩钢琉璃瓦,但是它的成本相对于其他的普通瓦片会比较高,而且由于琉璃瓦的渗透力低,若是在家做饭,水蒸气不能排出,对屋顶的危害也不少,并且由于做工较为复杂,不适合长距离运输易破损,重量重,易脱落,环境污染,目前国家环境保护重点整改对象。不过,琉璃瓦防水能力比较强,能够保证下大雨的时候,水能够及时的流走。
其次,琉璃瓦是古代的发明,优点是可以自净,下雨下雪自动干净,放在古代琉璃瓦还有达官显贵的家中才能使用,而我国的文化瑰宝——故宫的屋顶大部分采用的就是琉璃瓦,这也可以很好的解释为何经过千年的洗礼,故宫的屋顶居然没有鸟屎的痕迹,就这就是由于琉璃瓦的坡面采用无缝连接,密封性能相当出色,拥有其他屋顶建材无法比拟的防水性能,而且永久不褪色,即使长时间在阳光照射下也能保持颜色不变,所以,从耐用性以及美观、实用的角度来讲,琉璃瓦的确是个不错的选择!
不过,事物都是两方面的,琉璃瓦也一样的有利有弊,除了做工复杂,成本高外,还由于琉璃瓦瓦齿比较小,这样瓦匠在屋顶上压瓦的时候,就增加了难度,而且冬天遇冷会收缩,夏天预热膨胀,热胀冷缩会导致釉面龟裂,而由于琉璃瓦本身很材质以及安装问题,在修补的时候就会很麻烦,所以对于后续的养护和修补都是一件麻烦事,同时也增加的建筑资金的投入,对于一般的家庭是不太合适的。因此,家庭条件一般的话,还是考虑其他的瓦片进行装修,但是有钱的,琉璃瓦是个不错的选择。
综合上述,如果觉得对,请根据自己的情况来选择用什么瓦,若是选择琉璃瓦一定要做好防水施工,这是由于之前我们说过琉璃瓦安装是一个个小的构件拼接起来的,因此屋顶防水层是必须要做好的,而且对于经常下雪的地区,一定要就天沟修好点,要不然由于琉璃瓦的本身的特点,很容易掉到地上砸到路人。总之,选择了琉璃瓦,最好找一个有经验的施工队。以上是小编介绍的全部内容,欢迎点赞转发!感谢大家的支持!
-
平建职教中心毕业生就业工作总结.doc
2021-01-18 20:00:16在这里,他们用自己所学专业和辛劳的汗水,用他们最质朴的步伐,追寻着自己的人生梦想,在异域他乡,书写着平建职教中心毕业生就业职场上的优秀答卷。 作为驻天津实习就业办事处的教师,我们有机会接触更多的毕业生... -
请教各位大神:一种新的数组排序,初测速度是快速排序的50倍,有无市场价值,时间复杂度能计算出来吗?
2019-06-20 08:19:08如果对锚点位的数据进行的操作,还需要额外的映射在另外一个数据集合上,则称之为外建锚点。 列举一个实例,做进一步说明:要从大到小重新排序一个数组A;数组A有100个元素:数据d,规定从A[0]开始每5个数据为一组p_;同时... -
你必须知道的495个C语言问题.pdf
2013-01-20 14:30:542.9 为什么不能用内建的==和!=操作符比较结构? 2.10 结构传递和返回是如何实现的? 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值? 2.12 怎样从/向数据文件读/写结构? 结构填充 2.13... -
[你必须知道的495个C语言问题]人民邮电出版社.扫描版.pdf
2011-10-01 21:39:522.9 为什么不能用内建的==和!=操作符比较结构? 2.10 结构传递和返回是如何实现的? 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值? 2.12 怎样从/向数据文件读/写结构? 结构填充 2.13... -
Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好
2011-01-28 17:02:08通过上节的多窗口原理实现由登录对话框进入主窗口,而用户名和密码可以用 if 语句进行判断。 实现过程: 1.先新建Qt4 Gui Application 工程,工程名为mainWidget,选用QWidget 作 为Base class,这样便建立了主窗口... -
VC++科学计算器的设计V1_4Beta.rar
2010-03-23 04:54:59赋值运算符除用”=”外,还可用”:=”;”&”、”|”为位操作符,而对应的逻辑操作符为:”&&”、”||”;不等号可以使用”~=”、”!=”、””中的任何一个。 关于如何将一个源字符流数据按照数学规则计算出结果的... -
MFC的程序框架剖析
2015-03-05 09:53:1921、框架窗口(整个应用程序外框所包括的部分)是视类窗口(框架窗口中空白的地方)的一个父窗口 22、MFC提供了一个文档/视类的结构,文档是指CDocument类,视类是指CView类。前者用于数据的存储和加载, 后者用于... -
极品ADSL+路由器驱动优化工具cfos_7.52和cfosspeed_5.12汉化特别版
2010-06-29 08:26:00A: 如果你用的 ADSL, Cable 是原本需要安装 PPPoE 或是电信告诉你用 Windows 2K/XP/2003 内建的 PPPoE, 这代表者当你安装 cFos 以后, 可以完全移除原先其他 PPPoE 所创造出来的连线帐号. 完全以 cFos PPPoE 来取代之... -
PHP基础教程 是一个比较有价值的PHP新手教程!
2010-04-24 18:52:44不过明确的是编写那样的代码有多简单,购买它们会有多昂贵以及它们需要多么昂贵和强大的硬件。如果你有什么中立的观点(比如说没有被SUN和Microsoft的百万美金所影响),请顺便通知我。 据我所知,JSP基于Java,... -
新海药店管理系统真正完美永久注册版
2019-01-09 13:07:59做软件这些年以来发现一个问题,就是软件的优劣极难分辨和比较,即便是自己使用已久的软件,许多地方用起来觉得用不好,用户常常会归结到自己水平低、不会用,其实所有让自己郁闷的软件都是设计有问题的表现,真正... -
Linux操作系统基础教程
2013-04-08 21:34:26它本身就是一个完整的 32 位的多用户多任务操作 系统,因此不需要先安装 DOS 或其他的操作系统(MS Windows, OS2, MINIX..)就可以进 行直接的安装。 Linux的最早起源是在1991年10月5日由一位芬兰的大学生Linux ... -
Access+2000中文版高级编程
2012-02-05 09:20:254.4 通过编程实现同一窗体的多个副本 83 4.4.1 支持多窗体实例 84 4.4.2 检查Employees窗体的代码 84 4.4.3 自动关闭Employees窗体 86 4.5 小 结 87 第5章 使用DAO 88 5.1 理解DAO 88 5.1.1 了解... -
购物网站系统源代码网页模板正式版
2009-12-03 11:13:42网上购物系统,让你的客户在网上购物中心,进行网上购物,本系统是最好的网上购物的网站,用本程序建立之网上购物网站大全,上海,北京,深圳,广州,香港,国外网上购物网站系统很多是在此基础上完成的,我们将打造最好,最大的... -
EXCEL集成工具箱完整版 (简体/繁体/英文多国语言版) V7.0
2010-08-13 10:31:10【工作表拆分】 将当前工作表的某列数据按指定条件拆分成多个工作表,可以用任意列的数据以及选定的数据做为拆分条件。 【行列奇偶选择】 可视化对当前工作表的行与列进行快速的奇偶行或奇偶列快速选定操作。 【查找... -
EXCEL集成工具箱V8.0 多国语言版(2003-2010通用)
2010-09-11 12:08:58【工作表拆分】 将当前工作表的某列数据按指定条件拆分成多个工作表,可以用任意列的数据以及选定的数据做为拆分条件。 【行列奇偶选择】 可视化对当前工作表的行与列进行快速的奇偶行或奇偶列快速选定操作。 ... -
网上电子商务购物网站
2009-02-23 19:53:34电子商务网上购物网站自助建站管理系统,网络时代,一个电子商务的时代,一个创造财富奇迹的时候,你想建一个网上购物系统,网络购物系统,在线购物系统,商城购物系统 ,网络购物系统吗,你想用这个来创业吗? 购物系统,电子... -
软件工程教程
2012-07-06 23:10:29类图用滥了,建狗屋画了10页类图 类图没分清粗细层次: 概念类图 规约类图 实现类图 鸟类图 鸟类图 鸟类图 实例:监听器类图 使用类图的建议 不要试图使用所有的符号 根据项目开发的不同阶段,用正确的观点来画... -
EXCEL集成工具箱V9.0 多国语言最终原版(2003-2010通用)
2011-01-07 20:40:25【工作表拆分】 将当前工作表的某列数据按指定条件拆分成多个工作表,可以用任意列的数据以及选定的数据做为拆分条件。 【行列奇偶选择】 可视化对当前工作表的行与列进行快速的奇偶行或奇偶列快速选定操作。 ... -
EXCEL集成工具箱V8.0完整增强版(精简)
2010-09-23 16:58:17【工作表拆分】 将当前工作表的某列数据按指定条件拆分成多个工作表,可以用任意列的数据以及选定的数据做为拆分条件。 【行列奇偶选择】 可视化对当前工作表的行与列进行快速的奇偶行或奇偶列快速选定操作。 ... -
旅游幻灯片之:美丽欧洲PPT.rar
2019-07-16 14:13:13这道爱尔兰炖牛肉的小秘密就是啤酒的使用,传统的做法是用爱尔兰的黑啤来炖煮牛肉,比如Guinness。 第二次世界大战后的1944年,由于伦敦人口的急剧膨胀,权威人士提议并计划在距离伦敦城20-30英里的周边地区... -
php高级开发教程说明
2008-11-27 11:39:22行是干什么用的,它们在什么条件下执行,它们所要求的设置。即使你缺乏背景知识,遇到了 一个错综复杂的算法,你也能很快看出它所从事的任务,以及它的风格。 举个例子,然后说“照着做”总是很容易的,但我想这一章... -
EXCEL集成工具箱V6.0
2010-09-11 01:44:37【工作表拆分】 将当前工作表的某列数据按指定条件拆分成多个工作表,可以用任意列的数据以及选定的数据做为拆分条件。 【行列奇偶选择】 可视化对当前工作表的行与列进行快速的奇偶行或奇偶列快速选定操作。 ... -
室内外体育运动用地,包括体育场馆、游泳场馆、各类球场及其附属的业余体校等用地 A42 体育训练用地 为各类体育运动专设的训练基地用地 A5 医疗卫生用地 医疗、保健、卫生、防疫、康复和急救设施等用地 A51...