sql - oracle中如何使用级联

标签 sql oracle ora-00907

create table loginDetails(
 userId   varchar(30),
 cellPhoneNo    varchar(10),    
 displayName  varchar(20),
 password   varchar(20),
 secretQuestion varchar(50),
 secretAnswer varchar(50),
 joiningDate    date,
 foreign key(userId) references userDetails(userId) on delete cascade on update cascade
);

在oracle中使用时出现错误。

foreign key(userId) references userDetails(userId) on delete cascade on update

级联 *

ERROR at line 9: ORA-00907: missing right parenthesis

这个查询在 mysql 上可以工作,但在 oracle 上却不起作用?请任何人告诉我它在 Oracle 中是如何工作的。

最佳答案

Oracle不支持主键的级联更新。主键应该是唯一的且不可变的,因此不需要更改。由于您永远不应该更新主键,因此不需要级联这些更新。

一般来说,您可能还应该使用 VARCHAR2 数据类型而不是 VARCHAR。目前,这些数据类型是相同的,但 Oracle 将来可能会更改 VARCHAR 类型的语义,导致空字符串与 NULL 的处理方式有所不同。假设您不希望您的应用程序在将来这些语义发生变化时可能出现故障,那么使用 VARCHAR2 会更安全。

关于sql - oracle中如何使用级联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11174533/

相关文章:

oracle - 插入 TARGET_TABLE SELECT * FROM SOURCE_TABLE;

oracle - 找不到 'missing right parenthesis' 错误的原因

Oracle:不允许在插入语句中使用哪些调用函数的符号参数?

sql - 在 Oracle (11.2 之前) : When using cast(collect(. ..)) 中,如何对结果进行排序?

sql - 无法将值 NULL 插入 X 列,X 列不允许空值。插入失败。

sql - 简单的查询确实很慢

sql - 在没有字符串文字的有效 Oracle select 语句中,单词 `AS` 的最大比率是多少?

sql - 如何创建oracle程序将数据导出到历史表中?

sql - SQL 中的嵌套组和计数

sql - Postgresql 组中的前 N ​​项 WHERE N 是可变的