sql - Oracle SQL 设置带约束的主键和外键
问题描述
CREATE TABLE DriverTest
(DTest_ID number(8),
DTest_Type varchar2(50) NOT NULL,
DTest_Date date NOT NULL,
DTest_Result varchar2(50) NOT NULL,
CONSTRAINT pk_DTestID PRIMARY KEY(DTest_ID));
CONSTRAINT fk_EmployeeData FOREIGN KEY (Employee_ID) REFERENCES (Employee_ID));
CREATE TABLE Employee
(Employee_ID number(8),
Em_Name varchar2(50) NOT NULL,
Em_Address varchar2(50) NOT NULL,
Home_no number(15) NOT NULL,
Em_no varchar2(30) NOT NULL,
DoB date NOT NULL,
Gender varchar2(50) NOT NULL,
NI_no number(10) NOT NULL,
Annual_Salary number(10) NOT NULL,
CONSTRAINT pk_EmployeeID PRIMARY KEY(Employee_ID));
为什么这不会执行?它与我的前两张表一起工作,供客户招聘,但员工到司机,它说:
'Employee_ID' 无效标识符,ORA-00904 和 00904 00000 - 无效标识符
我以为我申报了初级和外国?可以请我帮忙,我看过类似的查询,但他们都有与我相同的脚本。
解决方案
您的代码中有一些错误。 这是 db<>fiddle 中的工作版本。
一些问题:
- 该
Employees
表需要先定义,然后才能用于外键关系。因此,表格的顺序错误。 - 需要声明用于外键的列。所以,
EmployeeId
需要在DriverTests
. - 您在第二个表定义中有一个额外的括号和分号。
我将表的名称更改为复数,因为这就是我命名它们的方式。
工作代码是:
CREATE TABLE Employees (
Employee_ID number(8),
Em_Name varchar2(50) NOT NULL,
Em_Address varchar2(50) NOT NULL,
Home_no number(15) NOT NULL,
Em_no varchar2(30) NOT NULL,
DoB date NOT NULL,
Gender varchar2(50) NOT NULL,
NI_no number(10) NOT NULL,
Annual_Salary number(10) NOT NULL,
CONSTRAINT pk_EmployeeID PRIMARY KEY(Employee_ID)
);
CREATE TABLE DriverTests (
DTest_ID number(8),
Employee_ID number(8),
DTest_Type varchar2(50) NOT NULL,
DTest_Date date NOT NULL,
DTest_Result varchar2(50) NOT NULL,
CONSTRAINT pk_DTestID PRIMARY KEY (DTest_ID),
CONSTRAINT fk_EmployeeData FOREIGN KEY (Employee_ID) REFERENCES Employees(Employee_ID)
);
推荐阅读
- macos - .plist 不保持进程活着
- javascript - 如何跟踪在 vanila javascript 中选择的事件 jquery?
- python - 将请求 OAuth2Session 转换为 google oauth2 凭据
- c# - Microsoft Bot 框架中的复合实体对于单个标记实体的附加值是多少(如果有)
- c# - 不再在 docker 中使用 dotnet watch 的理由是什么
- sql-server - 如何在 t-sql 中创建既是主键又是外键的单个键
- javascript - 将文本动态添加到列表后,如何更改文本(编辑其内容或类)
- javascript - 在 JavaScript 中将字符串转换为十进制数
- xpath - 如何使用 importxml 将网页内容下载到 Google 表格
- python - 如何单击网页中所有选定的链接,然后返回登录页面并单击下一个链接