sql - ORA-00905: 缺少关键字(从教科书复制)
问题描述
尝试上下查看代码,但无法使其正常工作。主要是尝试创建表功能。在尝试使用复合主键创建表之前工作正常。绝对难倒。任何帮助表示赞赏。
尝试删除键的名称,但随后被重定向到另一种错误:“无效数据类型”
Create Table Cust_Artist_EOI (ArtistID Number(38) Not Null,
CustomerID Number(38) Not Null,
Constraint Cust_Artist_EOI_PK Primary Key(ArtistID, CustomerID),
Constraint Cust_Artist_EOI_ArtistFK Foreign Key(ArtistID)
References MyArtist(ArtistID)
On Update No Action
On Delete Cascade,
Constraint Cust_Artist_EOI_CustFK Foreign Key(CustomerID)
References MyCustomer(CustomerID)
On Update No Action
On Delete Cascade);
解决方案
问题是on update
. 删除:
Create Table Cust_Artist_EOI (
ArtistID Number(38) Not Null,
CustomerID Number(38) Not Null,
Constraint Cust_Artist_EOI_PK Primary Key(ArtistID, CustomerID),
Constraint Cust_Artist_EOI_ArtistFK Foreign Key(ArtistID)
References MyArtist(ArtistID) On Delete Cascade,
Constraint Cust_Artist_EOI_CustFK Foreign Key(CustomerID)
References MyCustomer(CustomerID) On Delete Cascade
);
这是一个 db<>fiddle。
如果您查看 Oracle 中外键约束的语法图,您会发现既不支持on update
也不no action
支持。
我不确定为什么no action
不支持,因为这是默认行为(我认为能够表达默认行为是个好主意)。
不支持on update
是更好的主意。它不鼓励对主键进行更改。更改主键通常是个坏主意。
推荐阅读
- javascript - 如何将角度中的两个值的第一个值发送到节点?
- xml - 如何从tally xml api获取所有公司数据?
- c# - asp.net core AzureADJwtBearer 颁发者验证失败
- java - 如何验证我没有收到@JsonProperty 和@JsonAlias 中定义的两个值?
- xamarin.forms.listview - 无法将对象与子对象绑定
- python - 如何展平熊猫中的json字段
- docker - 没有“公共”的docker下的laravel应用程序的url如何?
- android - 运行cordova-android App时显示“等待模拟器启动...”
- php - 致命错误:未捕获的异常“Alchemy\BinaryDriver\Exception\ExecutableNotFoundException”,消息“未找到可执行文件,建议
- c# - 在 Xamarin Forms 中“重新添加”TabbedPage 子项时如何禁用 BottomNavigationView 移位模式?