2016-04-22 68 views
0

我想說明的是,funtom_customer表的外鍵的funtom_employee表「這裏不允許約束規範」 ......約束錯誤在創建表:

create table Funtom_customer 
(
    cust_ID   number(3) constraint cust_ID primary key, 
    cust_Name  varchar2(50) constraint cust_Name not null, 
    cust_Contact varchar2(50), 
    cust_Acmanager number(3) 
     CONSTRAINT cust_Acmanager FOREIGN KEY (funtom_employee), 
    cust_Addr1  varchar2(50), 
    cust_Addr2  varchar2(50), 
    cust_Addr3  varchar2(50), 
    cust_Addrpc  varchar2(10) 
); 
+1

該語法錯誤。哪個表和列是主鍵,你的外鍵應該引用? –

+0

你確定它沒有落在'約束cust_Name不爲空'上。你沒有允許命名'not null'約束,我猜想你想引入一個獨特的約束,並把它完成了一半? –

+0

@Damien_The_Unbeliever - 實際上,你可以;我不認爲你可以,但那部分是有效的。它甚至不介意約束名稱與列名稱相同。 –

回答

0
create table Funtom_customer 
(
cust_ID  number(3) not null, 
cust_Name  varchar2(50) not null, 
cust_Contact  varchar2(50), 
cust_Acmanager number(3) , 
cust_Addr1 varchar2(50), 
cust_Addr2 varchar2(50), 
cust_Addr3 varchar2(50), 
cust_Addrpc varchar2(10) 
) 
; 


alter table Funtom_customer add constraint pk_cust_ID primary key (cust_ID); 
alter table Funtom_customer add constraint fk_cust_Acmanager foreign key (cust_Acmanager) references funtom_employee(referenced_col); 
+0

在第二個改變我現在得到一個錯誤,說缺少左括號?謝謝您的幫助! –

+0

您也需要在本地表中爲FK指定列名。 –

+0

我不知道你引用的專欄名稱,這就是爲什麼我將它命名爲「referenced_col」 – Thomas

1

你的語法在幾個方面是畸形的。假設在funtom_employee表的主鍵被稱爲emp_id,您可以定義線的約束:

create table funtom_customer 
(
    cust_id   number(3) primary key, 
    cust_name  varchar2(50) not null, 
    cust_contact varchar2(50), 
    cust_acmanager number(3) references funtom_employee (emp_id), 
    cust_addr1  varchar2(50), 
    cust_addr2  varchar2(50), 
    cust_addr3  varchar2(50), 
    cust_addrpc  varchar2(10) 
); 

...這將導致系統生成的約束名稱,或指定的,超出作爲命名約束:

create table funtom_customer 
(
    cust_id   number(3), 
    cust_name  varchar2(50) not null, 
    cust_contact varchar2(50), 
    cust_acmanager number(3), 
    cust_addr1  varchar2(50), 
    cust_addr2  varchar2(50), 
    cust_addr3  varchar2(50), 
    cust_addrpc  varchar2(10), 
    constraint pk_funtom_customer primary key (cust_id), 
    constraint fk_funtom_customer_acmanager foreign key (cust_acmanager) 
    references funtom_employee (emp_id) 
); 

您也可以創建表格並在@Thomas顯示之後添加約束條件。

你可以命名一個非空約束,但它不常見;你也可以有一個命名約束來檢查列是否爲空,但是它不會在數據字典中顯示爲不可空(例如當你描述表時)。

+0

現在完美工作感謝您的幫助 –