首页 > 解决方案 > 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 - 无效标识符

我以为我申报了初级和外国?可以请我帮忙,我看过类似的查询,但他们都有与我相同的脚本。

标签: sqloracle

解决方案


您的代码中有一些错误。 是 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)
);

推荐阅读