我在Oracle中有以下作为CREATE TABLE:
CREATE TABLE cs2_users (
empnum varchar2(12) PRIMARY KEY,
toolsId varchar2(20)
CONSTRAINT nn_cs2_users_toolsId NOT NULL
CONSTRAINT fk_cs2_users_users FOREIGN KEY REFERENCES users.userid,
admin number(1,0) DEFAULT 0
CONSTRAINT nn_cs2_users_admin NOT NULL
CONSTRAINT ck_cs2_users_admin (admin IN (0,1)),
givenname varchar2(30) NOT NULL,
middlename varchar2(30),
sn varchar2(30) NOT NULL,
mail varchar2(50) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
但是它失败并出现此错误:
ERROR at line 5:
ORA-02253: constraint specification not allowed here`
Run Code Online (Sandbox Code Playgroud)
当我使用SQL*Plus连接时,这是版本信息:
SQL*Plus: Release 11.2.0.3.0 Production on Tue Dec 18 16:38:27 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Run Code Online (Sandbox Code Playgroud)
救命?
如果要指定内联约束,则该定义与列的定义分开.如果要创建约束,则需要指定约束的类型CHECK
.并且您的外键约束需要指定您引用的列.因此,例如,这将起作用
SQL> create table users( userid varchar2(20) primary key );
Table created.
SQL> CREATE TABLE cs2_users (
2 empnum varchar2(12) PRIMARY KEY,
3 toolsId varchar2(20) constraint nn_cs2_users_toolsId NOT NULL,
4 CONSTRAINT fk_cs2_users_users FOREIGN KEY(toolsId) REFERENCES users(userid),
5 admin number(1,0) DEFAULT 0 constraint nn_cs2_users_admin NOT NULL,
6 CONSTRAINT ck_cs2_users_admin CHECK(admin IN (0,1)),
7 givenname varchar2(30) NOT NULL,
8 middlename varchar2(30),
9 sn varchar2(30) NOT NULL,
10 mail varchar2(50) NOT NULL
11 );
Table created.
Run Code Online (Sandbox Code Playgroud)
虽然从列toolsId
引用userId
列似乎很奇怪users
.您似乎更有可能希望列从表中toolsId
引用该toolsId
列,tools
或者您希望将列命名为类似于userId
您要引用该userId
列的列users
.但后来我会问为什么你有一个单独的cs2_users
专栏,而不是简单地将这些信息放在users
表格中.
归档时间: |
|
查看次数: |
2996 次 |
最近记录: |