SQL 创建 2 个带约束的表

SQL create 2 tables with constraints

提问人:Mohammed Arbaz 提问时间:12/22/2022 最后编辑:MureinikMohammed Arbaz 更新时间:12/24/2022 访问量:212

问:

从第一个表开始:创建两个带约束的表

CREATE TABLE department
(
    depid varchar2(3) CONSTRAINT PKdepid PRIMARY KEY,
    dname varchar2(10) NOT NULL
);

创建第一个表。

起始第二张表:

CREATE TABLE employee
(
    eid number CONSTRAINT PKEID PRIMARY KEY, 
    ename varchar2(10), 
    depid varchar2(3) 
        CONSTRAINT FKDEPID 
             FOREIGN KEY REFERENCE dep(depid),
    designation varchar2(10),
    salary number CHECK (salary > 10000),
    doj date
);

CREATE TABLE employee
(
    eid number CONSTRAINT PKEID PRIMARY KEY, 
    ename varchar2(10), 
    depid varchar2(3) 
        CONSTRAINT FKDEPID 
            FOREIGN KEY REFERENCE dep(depid),
    designation varchar2(10),
    salary number CHECK (salary > 10000),
    doj date
)

第 1 行的错误:

ORA-02253:此处不允许约束规范

并在第二个条件中应用

CREATE TABLE employee
(
    eid number CONSTRAINT PKEID PRIMARY KEY, 
    ename varchar2(10), 
    depid varchar2(3) 
         CONSTRAIN FKDEPID 
             FOREIGN KEY REFERENCE dep(depid),
    designation varchar2(10),
    salary number CHECK (salary > 10000),
    doj date
);

CREATE TABLE employee
(
    eid number CONSTRAINT PKEID PRIMARY KEY, 
    ename varchar2(10), 
    depid varchar2(3) 
         CONSTRAIN FKDEPID 
             FOREIGN KEY REFERENCE dep(depid),
    designation varchar2(10),
    salary number CHECK (salary > 10000),
    doj date
)

第 1 行的错误:

ORA-00907:缺少右括号

我只是想创建表格

SQL Oracle 语法错误 ddl create-table

评论

1赞 Stu 12/22/2022
我删除了 TAG 垃圾邮件;请使用正确的 DBMS 重新标记您的问题 - 这可能不是您标记的问题。
0赞 Patrick Hurst 12/22/2022
请指定您正在使用的 RDBMS。SQL Server、MySQL 和 postgres 使用不同的语法。从错误消息来看,您似乎正在使用 Oracle?请解释您要解决的问题 - 详细说明您需要的结果。
0赞 Adrian Klaver 12/22/2022
丢失关键字。这在创建表约束时使用,而不是在直接在列上创建表约束时使用。在这里花一些时间为 Postgres 创建表CONSTRAINT
0赞 marc_s 12/22/2022
错别字:你有两次 - 它必须是(在末尾)。另外:你有 - 但它必须在最后带有 a ....专业提示:阅读文档!!它们清楚地说明了您的语法需要如何 - 这就是它们的用途!CONSTRAINCONSTRAINTTFOREIGN KEY ... REFERENCE .....REFERENCESS

答:

1赞 Mureinik 12/22/2022 #1

不应在内联外键定义中指定,只是(不是当前那样)。另外,请注意,您的语句引用了该表,而您的另一个表实际上称为:foreign keyreferencesreferencedepdepartment

CREATE TABLE employee (
  eid NUMBER CONSTRAINT pkeid PRIMARY KEY, 
  ename VARCHAR2(10), 
  depid VARCHAR2(3) CONSTRAINT fkdepid REFERENCES department(depid), -- Here!
  designation VARCHAR2(10),
  salary NUMBER CHECK(salary>10000),
  doj DATE);

评论

0赞 Adrian Klaver 12/24/2022
当我们出现拼写错误时,它不应该是.此外,您不需要使用关键字。仅当您要显式命名约束时才需要,否则 Postgres 将创建一个名称。TABLETAEBLCONSTRAINT
0赞 Mureinik 12/24/2022
@AdrianKlaver很好地抓住了错别字,谢谢。编辑和修复。不知道你为什么要引用Postgres。问题是关于甲骨文的
0赞 Adrian Klaver 12/24/2022
仍然没有修复。
0赞 Mureinik 12/24/2022
@AdrianKlaver :facepalm:我今天似乎不能直接打字了......再次感谢