Oracle SQL使用约束设置主键和外键

时间:2018-12-14 00:41:41

标签: sql oracle

mongo db

为什么不执行?它与我的前两个表配合使用,以供客户租用,但由雇员转为司机,它说:

  

“ Employee_ID”无效标识符,ORA-00904和00904 00000-无效   标识符

我以为我宣布了主要和外国?请允许我帮忙,我看过类似的询问,但是它们都具有与我相同的脚本。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您的创建表顺序不正确。首先需要创建Employee表:

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)); 

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));