我试图学习sql数据库,但我似乎无法理解这里的问题在哪里,我不断被告知缺少右括号。如果有人能指出问题所在(我正在开发oracle 11g xe),我将不胜感激:
create table emp_copy
employee_id NUMBER(6)
CONSTRAINT emp_employee_id PRIMARY KEY, first_name VARCHAR2(20)
, last_name VARCHAR2(25) CONSTRAINT emp_lname_nn NOT NULL
, email VARCHAR2(25) CONSTRAINT emp_mail NOT NULL
CONSTRAINT emp_mail_uk UNIQUE
, phone_number VARCHAR2(20)
, hire_date DATE default sysdate
CONSTRAINT emp_hire_date NOT NULL
, job_id VARCHAR2(10)
CONSTRAINT emp_job NOT NULL
, salary NUMBER(8,2)
CONSTRAINT emp_sal_ck CHECK (salary>0)
, commission_pct NUMBER(2,2)
, mgr_id NUMBER(6)
CONSTRAINT emp_mgr_fk REFERENCES
employees (employee_id)
, department_id NUMBER(4)
CONSTRAINT empdept_fk REFERENCES
dept (deptno) [ON DELETE CASCADE | ON DELETE SET NULL] );
1条答案
按热度按时间htrmnn0y1#
如果你的代码被格式化为易于阅读,那么验证代码就容易多了;因此,首先,修复它,这样您就可以通过将列分隔成单独的行(第一列和第二列没有这样做)并通过使用缩进来辅助可读性来读取它。
然后需要在表名之后、第一列定义之前加一个左括号。
最后,你需要整理最后一行。可能只是删除方括号及其内容;但是如果你想指定
ON DELETE
然后选择一个子句。命名约束是一种很好的做法(很多人不必费心,在调试过程中它会再次困扰他们,所以很高兴看到它被完成);但是,您可能需要检查所使用的名称,并确保始终应用命名约定。如果你要用
_nn
,_ck
,_fk
,_uk
(为什么uk
?)和_pk
后缀(这有助于一眼看出违反的约束类型)然后在任何地方使用它们。db<>在这里摆弄