我正在尝试学习SQL数据库,但是我似乎无法理解这里的问题所在,我不断被告知缺少正确的括号。如果有人能指出问题出在哪里(我正在研究Oracle 11G XE),将不胜感激:
(?:[/])([A-Z0-9]{10})(?:[\/|\?|\&|\s|$])
答案 0 :(得分:0)
如果对代码进行格式化以使其易于阅读,则验证代码要容易得多;因此,首先,对其进行修复,以便通过将各列分隔到单独的行(第一和第二列没有这样做)并使用缩进来提高可读性来读取它。
然后,在表名之后和第一列的定义之前需要一个括号。
最后,您需要整理出最后一行。可能只是删除方括号及其内容;但是如果要指定ON DELETE
操作,则选择一个子句。
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)
);
命名约束是一种好习惯(很多人不打扰,后来在调试过程中回来困扰他们,因此很高兴看到它完成了);但是,您可能需要检查使用的名称,并确保一致应用命名约定。如果要使用_nn
,_ck
,_fk
,_uk
(为什么使用uk
?)和_pk
后缀(这可能会有所帮助)告诉您违反约束的类型),然后在各处使用它们。
db <>提琴here