Sql 如何在oracle中级联更新和删除?

Sql 如何在oracle中级联更新和删除?,sql,oracle,cascade,Sql,Oracle,Cascade,我试图按照我书中的示例级联更新和删除,但问题是它们的语法在oracle DB中不起作用 我理解级联更新意味着对父级的更新也会更新其子级,并且会删除子级。。但是我无法理解oracle的语法。。我书中的具体问题如下: 7.5——为EMPLOYEE表编写CREATETABLE语句。电子邮件是 必填项,是备用键,部门的默认值为 人力资源从部门到员工级联更新但不删除。 7.6——为项目表编写CREATETABLE语句。的默认值 最大小时数是100。从部门到员工级联更新但不删除。 7.7——为赋值表编写CR

我试图按照我书中的示例级联更新和删除,但问题是它们的语法在oracle DB中不起作用

我理解级联更新意味着对父级的更新也会更新其子级,并且会删除子级。。但是我无法理解oracle的语法。。我书中的具体问题如下:

7.5——为EMPLOYEE表编写CREATETABLE语句。电子邮件是 必填项,是备用键,部门的默认值为 人力资源从部门到员工级联更新但不删除。

7.6——为项目表编写CREATETABLE语句。的默认值 最大小时数是100。从部门到员工级联更新但不删除。

7.7——为赋值表编写CREATETABLE语句。仅级联 从项目到任务的删除;不要级联删除或删除 从员工到任务的更新。

我最终通过以下查询成功地在iSQL*Plus中创建了这些表:

CREATE TABLE DEPARTMENT (
DepartmentName  char(35) NOT NULL,
BudgetCode      char(30) NOT NULL,
OfficeNumber    char(15) NOT NULL,
Phone           char(12) NOT NULL,

Constraint DepartmentPK PRIMARY KEY(DepartmentName)

);

INSERT INTO DEPARTMENT VALUES (
    'Administration', 'BC-100-10', 'BLDG01-300', '360-285-8100');

CREATE TABLE EMPLOYEE (
EmployeeNumber  int         NOT NULL,
FirstName       char(25)    NOT NULL,
LastName        char(25)    NOT NULL,
Department      char(35)    DEFAULT 'Human Resources' NOT NULL,
Phone           char(12)    NULL,
Email           char(30)    NOT NULL,
DepartmentName_FK char(35) NOT NULL,

Constraint EmployeePK   PRIMARY KEY(EmployeeNumber),
Constraint EmployeeAK1 UNIQUE(Email),
Constraint DepartmentFK FOREIGN KEY (DepartmentName_FK)
    references DEPARTMENT(DepartmentName)
--ON UPDATE CASCADE 
--ON DELETE no ACTION 

);

CREATE TABLE PROJECT (
ProjectID   int         NOT NULL,
Name        char(30)    NOT NULL,
Department1 char(15)    NOT NULL,
MaxHours    int         DEFAULT 100 NOT NULL,
StartDate   DATE        NULL,
EndDate     DATE        NULL,
DepartmentName_FK1 char(30)   NULL,


Constraint  datecheck check (StartDate < EndDate),
Constraint ProjectIDPK   PRIMARY KEY(ProjectID),
Constraint DepartmentFK1 FOREIGN KEY (DepartmentName_FK1)
    references DEPARTMENT(DepartmentName)
-- ON UPDATE CASCADE 
-- ON DELETE no ACTION 
);

CREATE TABLE Assignment(
ProjectID       Number      NOT NULL,
EmployeeNumber  Number      NOT NULL,
HoursWorked     Number      NULL,

Constraint ProjectIDEmpNumPK PRIMARY KEY(ProjectID, EmployeeNumber),

constraint ProjectIDFK FOREIGN KEY(ProjectID)
    references Project(ProjectID),
constraint EmpNumFK FOREIGN KEY(EmployeeNumber)
    references Employee(EmployeeNumber)
--CONSTRAINT UniqueEmployee UNIQUE (EmployeNumber)

--ON DELETE CASCADE 
);
创建表部门(
部门名称字符(35)不为空,
预算代码字符(30)不为空,
OfficeNumber字符(15)不为空,
电话字符(12)不为空,
约束DepartmentPK主键(DepartmentName)
);
插入到部门值中(
‘管理’、‘BC-100-10’、‘BLDG01-300’、‘360-285-8100’;
创建表EMPLOYEE(
EmployeeNumber int不为空,
FirstName字符(25)不为空,
LastName字符(25)不为空,
部门字符(35)默认“人力资源”不为空,
电话字符(12)空,
电子邮件字符(30)不为空,
部门名称\u FK字符(35)不为空,
约束EmployeePK主键(EmployeeNumber),
约束EmployeeAK1唯一(电子邮件),
约束DepartmentFK外键(DepartmentName_FK)
参考资料部门(部门名称)
--关于更新级联
--不删除任何操作
);
创建表项目(
projectd int不为空,
名称字符(30)不为空,
部门1字符(15)不为空,
MaxHours int默认值100不为空,
StartDate日期为空,
EndDate日期为空,
部门名称\u FK1字符(30)空,
约束日期检查(开始日期<结束日期),
约束ProjectDPK主键(ProjectID),
约束DepartmentFK1外键(DepartmentName_FK1)
参考资料部门(部门名称)
--关于更新级联
--不删除任何操作
);
创建表分配(
项目编号不为空,
员工编号不为空,
工时数为空,
约束ProjectDempNumpk主键(ProjectID,EmployeeNumber),
约束ProjectDFK外键(ProjectID)
参考项目(Projectd),
约束EmpNumFK外键(EmployeeNumber)
参考员工(员工编号)
--约束UniqueEmployee唯一(EmployeNumber)
--关于删除级联
);
但是如何指定级联删除和更新,以及如何指定不删除?

您尝试过这个吗

CREATE TABLE Assignment(
ProjectID       Number      NOT NULL,
EmployeeNumber  Number      NOT NULL,
HoursWorked     Number      NULL,

Constraint ProjectIDEmpNumPK PRIMARY KEY(ProjectID, EmployeeNumber),

constraint ProjectIDFK FOREIGN KEY(ProjectID)
    references Project(ProjectID)
ON DELETE CASCADE 
ON UPDATE no ACTION ,
constraint EmpNumFK FOREIGN KEY(EmployeeNumber)
    references Employee(EmployeeNumber)
ON DELETE no ACTION 
ON UPDATE no ACTION 
);

更新时无操作*第10行错误:ORA-00905:缺少关键字或尝试不使用onupdate,因为密钥的更新应无论如何传播以保持引用完整性。更新时无操作*第11行错误:ORA-00907:缺少右括号以及:删除级联*第10行错误:ORA-00904::标识符无效。