级联删除

转:SQLServer级联删除示例

自古美人都是妖i 提交于 2020-03-30 04:00:02
SQLServer 2000与Oracle 8i相比较,在级联删除上有太多的限制 表内自关联不支持级联删除和级联更新 一个表内在有多个列同时关联于另一个表时,不支持多个级联删除 还有什么循环级联删除限制,等等 ....... 一大堆限制,如果要迁移Oracle到SqlServer麻烦多多,特别对于用于构造树型结构的表内自关联(比如部门表)的级联删除特别讨厌 考虑来考虑去,对于SqlServer不能支持的诸多级联删除只有采用最原始的方法,彻底不用外键关联,而是用触发器来解决 以下是经过验证的触发器实现范例(自关联例子) 放弃外键关联后所有的完整性检查都要通过触发器实现 -- DELETE 级联删除,先删除,再删除所有级联的记录,采用递归触发器,当然要求数据库支持递归触发器功能开启(数据库属性设置中开启他),不过SqlServer只支持32级的递归啊 IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE NAME = 'DEL_DOCUMENTTYPE_001' AND TYPE = 'TR') DROP TRIGGER DEL_DOCUMENTTYPE_001 GO CREATE TRIGGER DEL_DOCUMENTTYPE_001 ON dbo.DOCUMENTTYPE FOR DELETE AS IF (SELECT COUNT(*)

DDL-级联删除

岁酱吖の 提交于 2020-02-28 23:57:56
#查看有没有索引:主键、外键、唯一键 SHOW INDEX FROM major; SHOW INDEX FROM stuinfo; #删除外键 ALTER TABLE stuinfo DROP FOREIGN KEY fk_stu_major; #传统的方式添加外键 ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id); #查看表中有没有数据 SELECT * FROM major; #插入数据 INSERT INTO major VALUES (1,'java'),(2,'H5'),(3,'大数据'); #查看表中有没有数据 SELECT * FROM stuinfo; #插入数据 INSERT INTO stuinfo SELECT 1,'john1','女',NULL,NULL,1 UNION ALL SELECT 2,'john2','女',NULL,NULL,1 UNION ALL SELECT 3,'john3','女',NULL,NULL,2 UNION ALL SELECT 4,'john4','女',NULL,NULL,2 UNION ALL SELECT 5,'john5','女',NULL,NULL,1 UNION ALL

EF 主键自增、级联删除

妖精的绣舞 提交于 2020-01-18 07:24:29
一、主键自增 1.设置数据库中,主键自增 2.设置VS中Model1.edmx 二、级联删除 使用Data Annotations: 如果我们要到一对主从表增加级联删除,则要在主表中的引用属性上增加 Required 关键字,如: public class Destination { public int DestinationId { get; set; } public string Name { get; set; } public string Country { get; set; } public string Description { get; set; } public byte[] Photo { get; set; } public List<Lodging> Lodgings { get; set; } } public class Lodging { public int LodgingId { get; set; } public string Name { get; set; } public string Owner { get; set; } public bool IsResort { get; set; } public decimal MilesFromNearestAirport { get; set; } [Required]

级联删除的错误总结

拟墨画扇 提交于 2019-12-27 07:16:46
今天在级联删除的时候不想写事务,所以偷了个懒写了两条SQl语句分别执行,并判断了count值,但是发现界面删除帖子的时候永远只能删除评论,帖子需要在删除一遍,我就很奇怪,直到后来仔细思考了一下,发现级联删除的时候,应该先删除字表,再删除主表。所以,,,,,,最好用事务去控制数据的准确性和一致性。 来源: CSDN 作者: GOF. 链接: https://blog.csdn.net/weixin_42226094/article/details/103585770

Hibernate级联删除

蓝咒 提交于 2019-12-26 15:08:08
如果cascade属性是默认值"none",当hibernate删除一个持久化对象的时候,不会自动删除与它关联的其他持久化对象。如果希望自动删除它关联的其他持久化对象,可以把casacde属性设为"delete"; <set name="students" cascade="delete" inverse="true"> <key column="school_id"/> <one-to-many class="Student"/> </set> 那么hibernate在删除一个Shool对象时,实际执行的SQL是: delete from students where school_id =1; delete from school where id=1; 来源: https://www.cnblogs.com/pangblog/p/3348059.html

sql级联删除

允我心安 提交于 2019-12-25 14:05:55
功能:在删除主表时,自动删除副表(外键约束)相应内容 删除包含 主键 值的行的操作,该值由其它表的现有行中的外键列引用。在级联删除中,还删除其外键值引用删除的主键值的所有行。 如: create database temp go use temp go create table UserInfo ( UserId int identity(1,1) primary key , UserName varchar(20), --用户名 password varchar(20) not null --密码 ) create table UserDetails ( id int identity(1,1) primary key, name varchar(50) not null, --真实姓名 userId int, foreign key (userId) references UserInfo(UserId) on delete cascade ) insert UserInfo values ('ly','jeff') insert UserInfo values('wzq','wzqwzq') insert UserInfo values('lg','lglg') insert UserDetails values('李四',1) insert UserDetails

SQL级联更新,级联删除

亡梦爱人 提交于 2019-12-24 04:09:52
SQL级联更新,级联删除 今天做了个测试,搞清楚了级联更新,级联删除 级联删除:当我们没有对键加级联删除的时候,删除主键表中的数据(外键表有引用的数据)时,会报错,不能删除,必须先把相关联的外键数据 删除了,才能删除主键表的数据,但如果新建外键的时候设置了级联删除,那么当我们删除主键表的数据时,数据库就会自动帮我们把相 关联的外键表数据删除掉,这个好理解 级联更新:一直困扰我,级联更新有什么用,是更新什么东西呢,今天做了个测试(mssql),终于搞清楚了一点,我们修改主键表中和外键表进 行关联的字段(一般是主键表的主键,mssql好像必须是主键),如果我们没有设置级联更新,那么这个时候会提示不能更新,因为外键表 还有数据正在和这条数据进行关联,但是如果设置了级联更新,那么外键表的数据会自动帮我们更新 今天做了个测试,搞清楚了级联更新,级联删除 级联删除:当我们没有对键加级联删除的时候,删除主键表中的数据(外键表有引用的数据)时,会报错,不能删除,必须先把相关联的外键数据 删除了,才能删除主键表的数据,但如果新建外键的时候设置了级联删除,那么当我们删除主键表的数据时,数据库就会自动帮我们把相 关联的外键表数据删除掉,这个好理解 级联更新:一直困扰我,级联更新有什么用,是更新什么东西呢,今天做了个测试(mssql),终于搞清楚了一点,我们修改主键表中和外键表进 行关联的字段

ORM表之间高级设计

穿精又带淫゛_ 提交于 2019-12-05 11:29:22
ORM表之间高级设计 一、表的继承 # db_test1 # 一、基表 # Model类的内部配置Meta类要设置abstract=True, # 这样的Model类就是用来作为基表 # 多表:Book,Publish,Author,AuthorDetail class BaseModel(models.Model): # 实现表公共字段的继承 create_data = models.DateTimeField(auto_now_add=True) is_delete = models.BooleanField(default=False) class Meta: # 基表必须设置abstract,基表就是给普通Model类继承使用的 # ,设置了abstract就不会完成数据库迁移完成建表,这张表不会被创建 abstract = True class Book(BaseModel): # 书 name = models.CharField(max_length=49) price = models.DecimalField(max_digits=5, decimal_places=2) class Publish(BaseModel): # 出版社 name = models.CharField(max_length=50) address = models.CharField

详解 Kubernetes 垃圾收集器的实现原理

China☆狼群 提交于 2019-12-02 09:05:50
垃圾收集器在 Kubernetes 中的作用就是删除之前有所有者但是现在所有者已经不存在的对象,例如删除 ReplicaSet 时会删除它依赖的 Pod,虽然它的名字是垃圾收集器,但是它在 Kubernetes 中还是以控制器的形式进行设计和实现的。 在 Kubernetes 引入垃圾收集器之前,所有的级联删除逻辑都是在客户端完成的,kubectl 会先删除 ReplicaSet 持有的 Pod 再删除 ReplicaSet,但是垃圾收集器的引入就让级联删除的实现移到了服务端,我们在这里就会介绍垃圾收集器的设计和实现原理。 概述 垃圾收集主要提供的功能就是级联删除,它向对象的 API 中加入了 metadata.ownerReferences 字段,这一字段会包含当前对象的所有依赖者,在默认情况下,如果当前对象的所有依赖者都被删除,那么当前对象就会被删除: type ObjectMeta struct { . . . OwnerReferences [ ] OwnerReference } type OwnerReference struct { APIVersion string Kind string Name string UID types . UID } OwnerReference 包含了足够的信息来标识当前对象的依赖者,对象的依赖者必须与当前对象位于同一个命名空间

Hibernate出现级联删除失败的问题

不羁岁月 提交于 2019-11-27 16:46:53
对于一对多的关联要想删除一的一端时同时把多的一端也删除掉,一般会配置级联删除 <!-- 多的一端配置 --> <set name="children" inverse="true" cascade="delete"> <key column="parent_id" /> <one-to-many class="Department" /> </set> <!-- 一的一端配置 --> <many-to-one name="parent" class="Department" column="parent_id" /> 不知为何在使用HQL删除的时候会出现不能删除数据有外键关联的错误(Hibernate版本5.0) DELETE FROM Department d WHERE d.id = :id 而使用如下语句则会级联删除 Department d = session.load(Department.class, id); session.delete(d); 总结: HQL不能级联删除,new的瞬时对象也不能 来源: oschina 链接: https://my.oschina.net/u/2427367/blog/530294