理解SQL(Oracle)创建表代码时遇到问题

理解SQL(Oracle)创建表代码时遇到问题,sql,oracle,Sql,Oracle,我了解Oracle的创建表语法 CREATE TABLE MyTable( id int primary key, ... ); 这将创建一个名为MyTable的带有int主键的表。所以,这里没有什么新鲜事 但我很难理解以下问题: CREATE TABLE departament ( cod_dept INTEGER CONSTRAINT dept_key PRIMARY KEY, dept_name CHAR(15) NOT NULL, admission

我了解Oracle的创建表语法

CREATE TABLE MyTable(
   id int primary key,
   ...
);
这将创建一个名为
MyTable
的带有int主键的表。所以,这里没有什么新鲜事

但我很难理解以下问题:

CREATE TABLE departament (
   cod_dept    INTEGER CONSTRAINT dept_key PRIMARY KEY,
   dept_name CHAR(15) NOT NULL,
   admission    DATE      NOT NULL,
   localization CHAR(20))
当我在
department
的表中查看Oracle的SQL Developer软件时,我可以看到4列:
cod\u dept
dept\u name
admission
本地化
。在“约束”选项卡上,我还可以看到
dept\u key
,但我不清楚这可能意味着什么。这里的
dept\u key
目的是什么

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


谢谢

部门密钥
是主键约束的名称。这意味着
cod\u dept
是表的唯一标识符,是标识行的机制,因此任何给定值只能出现一次

当您编写
id int primary key
时,Oracle将创建一个primary key约束以确保主键值的唯一性。所有约束都有名称,因此在本例中,Oracle会为该约束指定一个自动生成的名称。但您可以使用
约束
语法显式设置此约束的名称:

cod_dept    INTEGER CONSTRAINT dept_key PRIMARY KEY
此名称稍后可能用于引用约束,例如删除或修改约束:

ALTER TABLE department DROP CONSTRAINT dept_key;
编辑:
约束名称在整个模式中是唯一的,因此Oracle不能仅使用主键列的名称作为约束名称

主键可以显式命名。dept_key只是一个名称。

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

表格由以下部分组成:

  • 列(数据所在的位置)
  • 索引(用于更快搜索的数据的索引副本)
  • 约束(关于表中可以包含哪些数据的规则,包括PK、FK和check约束)

dept\u key是约束的名称。您在此处指定了名称:“INTEGER CONSTRAINT dept\u key PRIMARY key”,因此它将使用名称dept\u key创建约束。

另一种语法是在
创建表
指令之后编写以下内容

ALTER TABLE department
ADD CONSTRAINT dept_key PRIMARY KEY (cod_dept)

dept_key
则是您创建的约束的名称,该约束将成为此表的主键。为了让数据库引擎知道主键,并为其编制索引以获得最快的结果等等,它需要创建一个已编制索引的已知约束。在这里,是您给出了名为
dept\u key

对于您的种类信息,通常会看到为主键约束编写
PK\u[table name]
,为外键约束编写
FK\u[current\u table\u name].[foreign\u table\u name]


希望这有帮助!=)

我认为,无论何时创建主键值,默认情况下Oracle都会使用相同的名称为其创建约束,但看起来您正在使用其他名称创建约束。
谢谢

谢谢。编辑了OP,因为我还有一个问题。约束名称在架构(或用户)中是唯一的,而不是数据库。