代码之家  ›  专栏  ›  技术社区  ›  devoured elysium

无法理解SQL(Oracle)创建表代码

  •  2
  • devoured elysium  · 技术社区  · 14 年前

    CREATE TABLE MyTable(
       id int primary key,
       ...
    );
    

    这将创建一个名为 MyTable

    但我很难理解以下问题:

    CREATE TABLE departament (
       cod_dept    INTEGER CONSTRAINT dept_key PRIMARY KEY,
       dept_name CHAR(15) NOT NULL,
       admission    DATE      NOT NULL,
       localization CHAR(20))
    

    departement 的表中,我可以看到4列: cod_dept , dept_name , admission localization dept_key ,但我不明白这可能意味着什么。是什么 部门密钥 这里的目的是什么?

    编辑

    好的,这似乎是一种定义要添加到表中的约束的名称的方法。我的下一个问题是,为什么不把它命名为主键列呢?从我看到的情况来看,Oracle在默认情况下只是为约束创建了一个随机名称!

    7 回复  |  直到 14 年前
        1
  •  7
  •   axtavt    14 年前

    当你写作的时候 id int primary key CONSTRAINT 语法:

    cod_dept    INTEGER CONSTRAINT dept_key PRIMARY KEY
    

    此名称稍后可能用于引用约束,例如删除或修改约束:

    ALTER TABLE department DROP CONSTRAINT dept_key;
    

    编辑: 约束名称在整个架构中是唯一的,因此Oracle不能仅使用主键列的名称作为约束名称。

        2
  •  2
  •   Detect    14 年前

    主键可以显式命名。部门密钥只是一个名称。

        3
  •  1
  •   APC    14 年前

    dept_key 主键约束的名称。这意味着 cod_dept 是表的唯一标识符,是标识行的机制,因此任何给定值只能出现一次。

        4
  •  1
  •   Larry Lustig    14 年前

    这是您创建的表示主键的约束。

    桌子由以下部分组成:

    • 列(数据所在的位置)
    • 索引(用于更快搜索的数据的索引副本)
        5
  •  1
  •   tHeSiD    14 年前

    dept\u key是约束的名称。您在此处指定了名称: 整数约束dept\u key主键 因此它将创建一个名为dept\u key的约束。

        6
  •  1
  •   Will Marcouiller    14 年前

    另一种相同的语法是在 CREATE TABLE 说明。

    ALTER TABLE department
    ADD CONSTRAINT dept_key PRIMARY KEY (cod_dept)
    

    dept_key 然后是创建为该表主键的约束的名称。为了让数据库引擎知道主键,并为其编制索引以获得最快的结果等等,它需要创建一个已编制索引的已知约束。在这里,是你给了这个名字 .

    对于你善良的信息,人们常常看到写 PK_[table name] 对于主键和约束 FK_[current_table_name]_[foreign_table_name] 对于外键约束。

    希望这有帮助!=)

        7
  •  0
  •   Bharath    14 年前

    我认为,每当我们创建一个主键值时,默认情况下,Oracle会用相同的名称为它创建约束,但看起来你是在用其他名称创建约束。 谢谢您