首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何防止插入删除造成数据库死锁

数据库中经常会遇到这样情况:一个主表A,一个子表B,B包含有A主键作为。当要插入数据时候,我们会先插入A,然后获得AIdentity,再插入B。...遇到这种情况我听说了三种做法: 1 取消AB两个之间关系,这样就可以在删除数据时候就可以先删除主表A,然后删除子表B,让对这两个操作事务访问顺序一致。...2 删除A数据之前,先使用一个事务B相关外键指向另外A另外一个数据(比如在A中专门建一行数据,主键设置为0,永远不会对这行数据执行删除操作),这样就消除了要被删除数据在AB两个关系...3 在外关系“删除规则”设置为“层叠”,这样删除事务只需要直接去删除主表A,而不需要对子表B进行操作。因为删除规则设置为层叠以后,删除主表数据,子表中所有关联数据也同时删除了。...以上三个解决办法都是同事给出建议,我也不知道到底该使用什么办法才好。 不知道对于这种情况要防止死锁大家还有没有什么其他好办法

1.4K30

MYSQL数据库-约束

1、空属性 两个值:null(默认)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算 示例:创建一个班级,...包含班级名和班级所在教室 如果班级没有名字,你不知道你在哪个班级,如果教室名字可以为空,就不知道在哪上课 所以在设计数据时候,一定要在中进行限制,满足上面条件数据就不能插入,这就是...示例: 8、 用于定义主表和之间关系:约束主要定义在从上,主表则必须是有主键约束或unique约束。...,不创建约束,就正常建立学生,以及班级,该有的字段我们都有,在实际使用时候,可能会出现有没有可能插入学生信息中有具体班级,但是该班级却没有在班级,这很明显是有问题 因为此时两张在业务上是有相关性...解决方案就是通过完成。建立本质其实就是把相关性交给mysql去审核了,提前告诉mysql之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入

7.5K30
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL约束

二.非空约束 1.NULL与’ '比较 在MySQL数据类型已经说过,这二者是不同,NULL代表什么都没有,而' '代表一个空串。 在select语句中,NULL不会参与相应计算操作。...,因此两个之间一定存在所属关系,学生属于班级,设计时通过约束学生就属于,班级就属于主表。...是用于定义主表和之间关系 约束主要定义在从上,主表则必须是有主键约束或unique约束。当定义后,要求数据必须在主表主键列存在或为null。...所以,我们需要重新建立一个student,目的是引入逻辑关系。 目前学生是空,先插入数据: 若删除id=1班级,也不会成功,因为student还存在class_id=1学生。...注:主表在从存在前提下,不能drop table 主表。 ---- 约束,也存在constraint约束命名,不过mysqld内部会自动做这样操作。

18050

谈谈唯一约束和唯一索引关系_唯一约束和主键约束一个区别是

约束 全称完整性约束,它是关系数据对象,用来存放插入一个中一列数据规则,用来确保数据准确性和一致性。...索引 数据中用最频繁操作是数据查询,索引就是为了加速数据检索而创建一种分散数据结构。可以把索引类比成书目录,有目录肯定比没有目录书,更方便查找。...然后下面跟了一个答案如下 大意是说,约束和索引是不同,约束为优化提供了更多信息,并且允许在唯一约束上建立,而唯一索引是不行,然后还提供了一个小例子。...) REFERENCES t1 (col1) ); 运行结果 创建 t4,并将 t2 col1 列设置为 t4 col2 列 CREATE TABLE t4 ( col1 INT...但是最终两个 DDL 完全一样,说明在 MySQL 数据库里唯一约束和唯一索引只是概念不同,在不同功能叫法不同罢了,其实现方式是完全一样

1.2K20

重新学习Mysql数据库7:详解MyIsam与InnoDB引擎锁实现

说到锁机制之前,先来看看Mysql存储引擎,毕竟不同引擎锁机制也随着不同。 三类常见引擎: MyIsam :不支持事务,不支持,所以访问速度快。...锁机制是锁,支持全文索引 InnoDB :支持事务、支持,所以对比MyISAM,InnoDB处理效率差一些,并要占更多磁盘空间保留数据和索引。...InnoDB:用于事务处理应用程序,支持,如果应用对事务完整性有比较高要求,在并发条件下要求数据一致性。...当concurrent_insert为1时,如果没有空洞(中间没有被删除行),MyISAM允许一个进程在读同时,另一个进程插入记录。...这样事务B就无法在这个两个区间insert进新数据,但是事务B可以在两个区间区间插入数据

52730

看动画学算法之:hashtable

因为使用了散列算法,数据集映射成了短数据集,所以在插入时候就可能产生冲突,根据冲突解决办法不同又可以分为线性探测,二次探测,双倍散列和分离链接等冲突解决方法。...hash问题 有利就有弊,虽然使用散列函数可以数据集映射成为小数据集,但是散列函数可能且很可能将不同映射到同一个整数槽,即多对一映射而不是一对一映射。...尽可能使用最小容量散列表, 尽可能均匀地分散不同基地址∈[0..M-1], 尽可能减少碰撞。 在讨论散列函数实现之前,让我们讨论理想情况:完美的散列函数。...由于在所有密钥探测中使用相同模式,所以形成次级群集。 二次探测次级群集不如线性探测主群集那样糟糕,因为理论上散列函数理论上应该首先将分散不同基地址∈[0..M-1]。...我们遍历原始哈希所有,重新计算新哈希值,然后键值重新插入更大哈希,最后删除较早较小哈希

77720

MySQL存储引擎知多少

存储引擎概念是MySQL特点,Oracle没有专门存储引擎概念,Oracle有OLTP和OLAP模式区分。不同存储引擎决定了MySQL数据可以用不同方式来存储。...它是MySQL上第一个提供约束引擎。而且InnoDB对事务处理能力,也是其他存储引擎不能比拟。靠后版本MySQL默认存储引擎就是InnoDB。...InnoDB还支持(FOREIGN KEY)。所在叫做子表,所依赖(REFERENCES)叫做父。父中被字表关联字段必须为主键。...它使用存储在内存内容来创建,而且数据全部放在内存。这些特性与前面的两个不同。 每个基于MEMORY存储引擎实际对应一个磁盘文件。该文件文件名与名相同,类型为frm类型。...如果一个要求比较高事务处理,可以选择InnoDB。这个数据可以查询要求比较高选择MyISAM存储。如果该数据库需要一个用于查询临时,可以选择MEMORY存储引擎。

71931

Entity Framework——建模建库

Codefirst模式下,实体与之间映射,随实体关系不同不同。...entitytwoentityones,其中EntityTwo_Id和EntityOne_Id是,这两个构成了改复合主键。 ?...问题1:publications数据会大量重复:假设用户A订阅了电子学报,publications表里会有一条关于电子学报记录,当用户B也订阅电子学报时候,又会将这条数据插入publications...解决方案: 每次向publications插入记录时,先在查找待插入刊物是否存在,如果存在就不插入,只更新publicationusers。...,user,publicationusers,与之前不同是publicationusers多了Id ,InsertTime ,UpdateTime 这三个字段,同时去掉了publications,

1.1K70

【MYSQL】约束

一、空属性 两个值:null(默认)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算 案例: 创建: create...可以看到我们插入空值时候,这里是会报错。 注:空字符串和null是不同,这里可以插入空串,但是不能插入数据。...六、自增长 当对应字段,不给值,会自动被系统触发,系统会当前字段已经有的最大值 +1操作,得到一个新不同值。通常和主键搭配使用,作为逻辑主键。...这样可以使对应于SQL语句执行得更快,可快速访问数据特定信息 七、唯一 一张中有往往有很多字段需要唯一性,数据不能重复,但是一张只能有一个主键:唯一就可以解决中有多个字段需要唯一性约束问题...int auto_increment primary key, name varchar(5) unique ); 八、 用于定义主表和之间关系:约束主要定义在从上,主表则必须是有主键约束或

20940

《大数据之路》读书笔记:维度设计

第一种是所有维度层次结构全部扁平化、冗余存储一个维度,比如商品一至三级类目分别用三个字段来存储,品牌等处理也是类似的;(星型模型) 2....优点:可以重复属性移至其自身所属,删除冗余数据。 缺点:用户角度来看,做统计分析时每次查询都需要进行多表之间关联,复杂度高,同时查询性能较差。...反规范化:维度属性层次合并到单个维度操作 优点:用户角度来看,在做统计分析时,方便、易用且性能好。 缺点:所有的数据都存放在一张,会出现数据冗余。...(极限存储有局限性,不太适合高变化率数据,不太建议使用) 四、微型维度 微型维度创建是通过一部不稳定属性主维度移除,并将它们放置拥有自己代理来实现。...保持维度主键不变,多值属性放在维度多个属性字段。 维度主键发生变化,一个维度值存放多条记录。 五、杂项维度 很多字段建立一个维,在事实只需保存一个即可。

68610

mysql基本命令

右连接 select * from 1 inner join 2 on 1.列名=2.列名; 内连接 注意:如果超过3个联合操作,如果其中两个操作时已经改变了结构,应该两个操作结果作为一个临时再与第三个联合操作...,execute sql语句后必须commit才能真正改变数据库 close()注意最后有两个close,游标要关闭,连接也要关闭 sql注入 sql注入就是通过把SQL命令插入Web表单提交或输入域名或页面请求查询字符串...,例如第一个事务对一个数据进行了修改,这种修改涉及全部数据行。...,BTree 每层节点数多,层数少,减少了IO读写次数,查询结果更加稳定 5.主键 主键:数据对储存数据对象予以唯一和完整标识数据列或属性组合。...一个只能有一个主键,且主键取值不能缺失,即不能为空值(Null)。 :在一个存在另一个主键称此

1.2K10

【MySql】约束

中一定要有各种约束,通过约束,让我们未来插入数据数据是符合预期。约束本质是通过技术收到逼迫程序员插入正确数据,反过来,站在mysql视角,凡是插入进来数据,都是符合数据约束。...站在正常业务逻辑: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据时候,一定要在中进行限制,满足上面条件数据就不能插入。...,不给值,会自动被系统触发,系统会当前字段已经有的最大值+1操作,得到一个新不同值。...foreign key 用于定义主表和之间关系:约束主要定义在从上,主表则必须是有主键约束或unique约束。...此时,在实际使用时候,可能会出现什么问题? 有没有可能插入学生信息中有具体班级,但是该班级却没有在班级

16330

MySQL-多表操作

约束 添加约束 键指的是-一个引用另一个一列或多列,被引用列应该具有主键约束或唯一性约束, 从而保证数据一-致性 和完整性。 ➢被引用称为主表。...ON DELETE与ON UPDATE用于设置主表数据被删除或修改时,对应数据处理办法。 ? 关联操作 实体之间具有一对一、一对多和多对多联系。...➢具有关联数据,可以通过连接查询方式获取,并且在没有添加约束时,关联数据插入、更新和删除操作互不影响。...➢对于添加了约束关联而言,数据插入、更新和删除操作就会受到一定约束。 一个具有约束插入数据时,字段值会受主表数据约束,保证插入数据必须符合约束规范要求。...例如,字段不能插入主表不存在数据

3.1K20

如何让JOIN跑得更快

以上述订单、产品为例,假定产品已经装入内存,订单存储在外存序号化过程是这样:先读入一批订单数据,设其中某记录 r pid 对应是内存中产品第 i 条记录。...我们要将 r pid 字段值转换为 i。对这批订单记录都完成这样转换后,再做关联计算时,外存中分批读入订单数据。...数据量大需要分布式计算时,如果维较小,SPL 采用复写维机制,在集群节点上复制多份;如果维很大,则采用集群维方法以保证随机访问。这两种方法都可以有效避免 Shuffle 动作。...关联时,两个游标读取记录,逐条比较 cid 值。如果 cid 相等,则将两记录合并成结果游标的一条记录返回。如果不相等,则 cid 小那个游标再读取记录,继续判断。...当数据量继续增加,需要多台服务器集群时,SPL 提供复组机制,需要关联按照主键分布集群节点上。相同主键数据在同一节点,避免分机之间数据传输,也不会出现 Shuffle 动作。

64220

定了!MySQL基础这样学

create table 名 as select语句; 6.3.2、批量插入     批量插入本质上是查询结果插入另一张。...主键自增长:AUTO_INCREMENT, 1 开始,步长为 1。 约束:FOREIGN KEY,A列. A值必须参照于B某一列(B)。...设计可以有两种方案: 在t_card添加列(相对t_user),并且给添加唯一约束; 给t_card主键添加约束(相对t_user),即t_card主键也是。...例如再创建一张t_stu_tea,给出两个,一个相对t_stu,另一个相对t_teacher。...视图是站在不同角度看到数据,同一张数据,通过不同角度去看待数据。     我们可以对视图进行增删改查,会影响数据,通过视图来影响原数据,并不是直接操作原

2.1K20

如何让 JOIN 跑得更快?

以上述订单、产品为例,假定产品已经装入内存,订单存储在外存序号化过程是这样:先读入一批订单数据,设其中某记录 r pid 对应是内存中产品第 i 条记录。...我们要将 r pid 字段值转换为 i。对这批订单记录都完成这样转换后,再做关联计算时,外存中分批读入订单数据。...数据量大需要分布式计算时,如果维较小,SPL 采用复写维机制,在集群节点上复制多份;如果维很大,则采用集群维方法以保证随机访问。这两种方法都可以有效避免 Shuffle 动作。...关联时,两个游标读取记录,逐条比较 cid 值。如果 cid 相等,则将两记录合并成结果游标的一条记录返回。如果不相等,则 cid 小那个游标再读取记录,继续判断。...当数据量继续增加,需要多台服务器集群时,SPL 提供复组机制,需要关联按照主键分布集群节点上。相同主键数据在同一节点,避免分机之间数据传输,也不会出现 Shuffle 动作。

72320

如何让Join跑更快?

以上述订单、产品为例,假定产品已经装入内存,订单存储在外存序号化过程是这样:先读入一批订单数据,设其中某记录 r pid 对应是内存中产品第 i 条记录。...我们要将 r pid 字段值转换为 i。对这批订单记录都完成这样转换后,再做关联计算时,外存中分批读入订单数据。...数据量大需要分布式计算时,如果维较小,SPL 采用复写维机制,在集群节点上复制多份;如果维很大,则采用集群维方法以保证随机访问。这两种方法都可以有效避免 Shuffle 动作。...关联时,两个游标读取记录,逐条比较 cid 值。如果 cid 相等,则将两记录合并成结果游标的一条记录返回。如果不相等,则 cid 小那个游标再读取记录,继续判断。...当数据量继续增加,需要多台服务器集群时,SPL 提供复组机制,需要关联按照主键分布集群节点上。相同主键数据在同一节点,避免分机之间数据传输,也不会出现 Shuffle 动作。

70830

数据设计 基本思路

SQL是关系数据中用一种语言。所以,为了简化SQL,关系(内部和外部)要尽量设计合理。...前面提到了两个关联.两个之间数据关系有三种: 1)一对一;两个表里数据唯一对应; 2)一对多;A在B里对应多条数据,但B里一条数据绝对只对就A一条数据; 3)多对多;A里一条数据对应....这样可以让主表不存在NULL; c)不想轻易就查出来数据,比如一个人工资详情,等.可以在主另一中放着; d)大文本,通过一个关联,这样可以提高查询效率; 一对多 情况可以如下:...有一个人员信息info,里面包括一个:email;这个字段里存是邮箱emailBox里主键:id;因为一个人可以对应多个邮箱,但一个邮箱只能属于一个人(他自己要共用木有办法) 多对多 对优化设计用处最大...各字段只能和主键有依赖关系.如果非主键和非主键间有依赖关系,就要将它们主表分离出去,放在另一个,并通过进行关联 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

77820

linux 之mysql——约束(constraint)详解

即使两行记录相关数据相同,但由于主键值不同,所以也认为是两行不同记录 5、按主键约束字段数量分类 无论是单一主键还是复合主键,一张主键约束只能有一个(约束只能有一个,但可以作用到好几个字段)...键名 show create table myself  1 什么是 若有两个A、B,id是A主键,而B也有id字段,则id就是B约束主要用来维护两个之间数据一致性。...A为基本,B为信息 1、涉及术语 约束 字段 键值 2、约束、字段、键值之间关系 某个字段添加约束之后,该字段称为字段,字段每个数据都是键值 3、按约束字段数量分类...单一:给一个字段添加约束 复合:给多个字段联合添加一个约束 4、一张可以有多个字段(与主键不同)  建立两个,学生,和班级 学生(添加单一) sno(pk)...:如果父记录被删除,则子表对应记录自动被删除 父——被引用 子表——引用父健作为 on delete set null  关联列值设置为null  alter table

2.3K20

SQL Server六种数据移动方法

值得注意是:如果源数据库要拷贝,注意移动顺序,有时要分批移动,否则主键,索引可能丢失,移动时候选项旁边提示说很明白,或者一次性复制目标数据,再重新建立,主键,索引。    ...其实建立数据库时,建立,主键,索引文件应该和建文件分开,而且用数据文件也分开,并分别放在不同驱动器上,有利于数据优化。         2.  ...这种方法可以完全恢复数据库,包括,主键,索引。       4.  ...直接拷贝数据文件         把数据数据文件(*.mdf)和日志文件(*.ldf)都拷贝目的服务器,在SQL   Server   Query   Analyzer中用语句进行恢复:...区别是前者把数据插入一个新(先建立,再插入数据),后者是把数据插入已经存在一个,我个人喜欢后者,因为在编程结构上,应用范围上,第二条语句强于前者。         6.

97030
领券