我有两门课:
数据库中的Child表有一列ParentId -> 典型的One(Parent)-> Many(Children)关系
现在我创建两个实体,它们
public class Parent
{
@OneToMany(mappedBy="Parent", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
public Set<Child> getChildern()
{
...
}
}
public class Child
{
@ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
@JoinColumn(name="ParentId")
public Parent getParent()
{ ... }
}
Run Code Online (Sandbox Code Playgroud)
现在我有两种情况:
奖励问题:
我是SQL新手,遇到了一个奇怪的问题.所以我有两张桌子OFFERS和SUPPLIER.这是供应商表.
CREATE TABLE "SUPPLIER"
( "S#" NUMBER,
"NAME" VARCHAR2(50),
"CITY" VARCHAR2(50),
PRIMARY KEY ("S#") ENABLE
)
Run Code Online (Sandbox Code Playgroud)
这是OFFERS表.
CREATE TABLE "OFFERS"
( "P#" NUMBER,
"S#" NUMBER,
"V#" NUMBER,
"PR#" NUMBER,
CONSTRAINT "PK_OFFERS" PRIMARY KEY ("P#") ENABLE
)
Run Code Online (Sandbox Code Playgroud)
所以现在,当我尝试像这样添加一个外键约束到商品表
ALTER TABLE OFFERS
ADD CONSTRAINT FK_SUPPLIERS FOREIGN KEY(S#)
REFERENCES SUPPLIER (S#)
ON DELETE CASCADE
ON UPDATE CASCADE
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:"ORA-01735:ALTER TABLE选项无效".如果我删除最后一行,这是"ON UPDATE CASCADE",这完全正常.那么,我做错了什么?我在互联网上看过很多像这样的例子,应该有用,所以我有点困惑.我正在研究apex.oracle.com,如果这有任何区别的话.
我有两个实体类:UserConfirmation 和 User,它们是一对一的关系,使用以下带注释的代码:
父/所有者实体(用户确认):
@OneToOne(mappedBy = "userConfirmation", cascade = CascadeType.ALL)
@JsonManagedReference
private User user;
Run Code Online (Sandbox Code Playgroud)
子实体(用户):
@OneToOne
@JoinColumn(name = "user_confirm_id")
@JsonBackReference
private UserConfirmation userConfirmation;
Run Code Online (Sandbox Code Playgroud)
在当前情况下Cascade.ALL,当我删除 UserConfirmation 时,其关联的 User 也会被删除,这是我不希望的。我想在删除用户确认后保留用户。
我尝试过以下方法:
在删除 UserConfirmation 之前将用户设置为 null:userConfirmation.setUser(null);但这会产生 NullPointerException
尝试了 Cascade.REMOVE 和 Cascade 上的几乎所有内容,但没有一个有效。
一如既往地感谢您的帮助:)
我不清楚当删除指定选项 CASCADE 的“外键约束”时会发生什么。
例如,考虑这个命令
ALTER TABLE table1 DROP CONSTRAINT foreignKeyToTable2 CASCADE.
Run Code Online (Sandbox Code Playgroud)
在这种情况下,选项 CASCADE 应该做什么?如果我省略它会发生什么?如果我写 RESTRICT 而不是 CASCADE 呢?
注意:此查询示例摘自“Ramez Elmasri,Shamkant B. Navathe - 数据库系统基础知识,第 5 章末尾”。
我目前正在使用 Oracle SQL Developer 编写数据库,我想对我的外键使用 ON DELETE CASCADE,但它显然不起作用。以下是有关声明。您可能会注意到没有更多的表,只有这两个用于测试。
CREATE TABLE pizza
( size NUMBER(3),
price NUMBER(5,2),
CONSTRAINT pk_pizza PRIMARY KEY (size, price)
);
CREATE TABLE pizzacondiment
( condiment VARCHAR(30),
pizzasize NUMBER(3),
pizzaprice NUMBER(5,2),
CONSTRAINT pk_condiments PRIMARY KEY (condiment, pizzasize, pizzaprice)
CONSTRAINT fk_condiments_pizza FOREIGN KEY (pizzasize, pizzaprice)
REFERENCES pizza (size, price)
ON DELETE CASCADE;
);
Run Code Online (Sandbox Code Playgroud)
现在,当我想放下桌上披萨时,输出说:
CREATE TABLE pizza
( size NUMBER(3),
price NUMBER(5,2),
CONSTRAINT pk_pizza PRIMARY KEY (size, price)
);
CREATE TABLE pizzacondiment
( condiment VARCHAR(30),
pizzasize NUMBER(3),
pizzaprice NUMBER(5,2), …Run Code Online (Sandbox Code Playgroud) 我有两张桌子:
CREATE TABLE category(
id INTEGER NOT NULL DEFAULT CATEGORY_SEQUENCE.NEXTVAL,
name VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE product(
id INTEGER NOT NULL DEFAULT PRODUCT_SEQUENCE.NEXTVAL,
name VARCHAR(50),
id_category INTEGER REFERENCES category(id) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY(id)
);
Run Code Online (Sandbox Code Playgroud)
当我 时DELETE FROM category,产品不会被删除。
我究竟做错了什么?
我正在寻找一个 SQL 脚本,该脚本将列出从表 X 中删除记录时将受到影响的所有表。它还应该列出“树”下受影响的依赖表,因为受影响的表将对其他表进行级联删除,这反过来又会影响其他人等等。
我有一个缓慢的删除查询。我曾经EXPLAIN ANALYZE了解瓶颈,我看到两个触发器很慢:
Trigger for constraint other_table_1_fid_fkey: time=3.644 calls=1
Trigger for constraint other_table_2_fid_fkey: time=6.289 calls=1
Run Code Online (Sandbox Code Playgroud)
在这次讨论之后,我添加了索引。索引fid确实other_table_1提高了性能。fid但是在in上添加索引并other_table_2没有任何区别,而且它似乎是delete查询中的瓶颈。
我的问题是如何调试(或EXPLAIN ANALYZE)触发器本身。
谢谢,
PS 为了解决我的具体问题,我暂时删除了外键约束,它提高了性能。
我有一个带有2个表的Microsoft SQL数据库:dog和cat.
"dog"表有一个名为"food"的主键列,它与"cat"表中的一个名为"food"的列有关,该表用作外键.
表之间的关系有一个"on delete cascade"规则集,所以当我从"dog"表中删除一行时,"cat"表中的relveant行也应该被删除.
但是"cat"表中的行会被net删除,它们会保留.我使用Microsoft SQL数据库管理器删除"dog"表中的行.
知道为什么会这样吗?我是否需要使用特殊的delete sql命令以这种方式删除行?
//编辑
表的脚本是:
USE [VELES]
GO
/****** Object: Table [dbo].[Periods] Script Date: 01/18/2011 14:52:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Periods](
[PeriodID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[PeriodName] [nvarchar](50) COLLATE Hebrew_CS_AS NULL,
[PeriodStartDate] [smalldatetime] NOT NULL,
[PeriodEndDate] [smalldatetime] NOT NULL,
CONSTRAINT [PK_Periods] PRIMARY KEY CLUSTERED
(
[PeriodID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
USE [VELES]
GO
/****** Object: Table [dbo].[Exams] …Run Code Online (Sandbox Code Playgroud) 我是sql server 2012的新手,想了解如何使用t-sql创建以下输出.有很多俱乐部号码所以必须有一个循环或光标.请帮忙!!
表
club_number name number
---------- -------------------------------------------------- -----------
355292 NULL NULL
NULL Giviton Mbunge 355308
NULL Etero Aaron 355317
NULL Evason Banda 355326
NULL Kachibobo Batoni 355335
NULL Kashamba Nkhani 355344
355353 NULL NULL
NULL Daniel Banda 355362
NULL James Aaron 355371
NULL Amson Kamanga 355380
NULL Gostino George 355399
355405 NULL NULL
NULL Yohane Zimba 355414
NULL Haward M.Chilembwe 355423
NULL Zikiele Blangete 355432
355441 NULL NULL
Run Code Online (Sandbox Code Playgroud)
结果:我想看看上面的TABLE如下,哪个查询可以做到?请帮忙
club_number name number
---------- -------------------------------------------------- -----------
355292 NULL NULL …Run Code Online (Sandbox Code Playgroud) cascade ×10
sql ×4
ddl ×2
foreign-keys ×2
hibernate ×2
java ×2
jpa ×2
oracle ×2
t-sql ×2
alter-table ×1
entities ×1
postgresql ×1
snowflake-cloud-data-platform ×1
sql-server ×1