【问题标题】:Create table with an error创建有错误的表
【发布时间】:2013-08-12 16:51:35
【问题描述】:

我创建了一个名为ITEM的表

CREATE TABLE item
(Item_no NUMBER(4) CONSTRAINT item_item_no_pk PRIMARY KEY, 
item_name VARCHAR2 (50) CONSTRAINT item_item_name_nn NOT NULL, 
Category_code VARCHAR2 (3) CONSTRAINT item_category_code_nn NOT NULL,
Qty_in NUMBER (5) CONSTRAINT item_qty_in_ck CHECK (qty_in > 0), 
Qty_out NUMBER (5) CONSTRAINT item_qty_out_ck CHECK (qty_out > 0), 
Qty_bal NUMBER (5) CONSTRAINT item_qty_bal_ck CHECK (qty_bal >= 0),
Last_purchase_date DATE, 
Last_sale_date DATE, 
Cost_price NUMBER (5,2) CONSTRAINT ITEM_cost_price_ck CHECK (cost_price > 0),
Sales_price NUMBER (5,2) CONSTRAINT ITEM_sales_price_ck CHECK (sales_price > 0));

现在我正在尝试创建一个类别表

CREATE TABLE category
   (Category_code VARCHAR2(3) NOT NULL,  
    CONSTRAINT category_Category_code_fk 
    FOREIGN KEY (Category_code) REFERENCES item (Category_code), 
    Category_name VARCHAR2(50) NOT NULL);

我收到了这个错误:

SQL 错误:ORA-00955:名称已被现有对象 00955 使用。00000 - “名称已被现有对象使用”

我不确定我错过了什么,因为我知道你可以拥有相同的列名......我一直在兜圈子。如果有人能指出我正确的方向,我将不胜感激。

【问题讨论】:

  • 我不确定您遇到了什么错误,但是如果您尝试在第二个表中引用表 ITEM,那么您在第二个表定义中的何处指定该表?
  • 我得到的错误是 SQL 错误:ORA-00955:名称已被现有对象 00955 使用。00000 -“名称已被现有对象使用”我引用了项目表,因为外键是分类表中的category_code
  • 从项目中引用类别更有意义:Category_code VARCHAR2 (3) CONSTRAINT item_category_code_nn NOT NULL references category( Category_code)
  • category_code 是分类表中的外键。这就是我先创建项目表,然后引用项目表的原因。
  • 不要混合约束和列声明。将约束放在最后(列之后)。

标签: sql oracle foreign-keys constraints


【解决方案1】:

试试这个修改后的sql代码

CREATE TABLE category
(
 Category_code VARCHAR(3) PRIMARY KEY,
 Category_name VARCHAR(50) NOT NULL
)

CREATE TABLE item
(
 Item_no            NUMERIC(4, 2) CONSTRAINT item_item_no_pk PRIMARY KEY,
 item_name          VARCHAR (50) CONSTRAINT item_item_name_nn NOT NULL,

 Category_code      VARCHAR(3) CONSTRAINT item_category_code_nn NOT NULL
      CONSTRAINT    category_Category_code_fk 
      FOREIGN KEY   (Category_code) 
      REFERENCES    category (Category_code),

 Qty_in             NUMERIC(4, 2) CONSTRAINT item_qty_in_ck CHECK (qty_in > 0),
 Qty_out            NUMERIC(4, 2) CONSTRAINT item_qty_out_ck CHECK (qty_out > 0),
 Qty_bal            NUMERIC(4, 2) CONSTRAINT item_qty_bal_ck CHECK (qty_bal >= 0),
 Last_purchase_date DATE,
 Last_sale_date     DATE,
 Cost_price         NUMERIC(4, 2) CONSTRAINT ITEM_cost_price_ck CHECK (cost_price > 0),
 Sales_price        NUMERIC(4, 2) CONSTRAINT ITEM_sales_price_ck CHECK(sales_price > 0)
)

当您创建一个外键关系时,

  1. 首先创建包含主键的表(Category table)。

  2. 定义主键,(Category_code VARCHAR(3) PRIMARY KEY)

  3. 创建引用 Category_code 的表,(项目表)。

  4. 创建引用,即外键

    Category_code VARCHAR(3) CONSTRAINT item_category_code_nn NOT NULL 约束 category_Category_code_fk 外键(Category_code) REFERENCES 类别(Category_code)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-28
    • 2013-05-14
    • 2017-11-04
    • 2013-12-15
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    相关资源
    最近更新 更多