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

dev*_*ium 2 sql oracle

我知道Oracle的create table语法

CREATE TABLE MyTable(
   id int primary key,
   ...
);
Run Code Online (Sandbox Code Playgroud)

这将创建一个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))
Run Code Online (Sandbox Code Playgroud)

当我抬头对Oracle的SQL Developer软件departement的表,我可以看到4列:cod_dept,dept_name,admission和localization.在约束选项卡上,我也可以看到dept_key,但我对这可能意味着什么感到困惑.这里的dept_key目的是什么?

编辑

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

谢谢

axt*_*avt 7

编写时id int primary key,Oracle将创建主键约束以确保主键值的唯一性.所有约束都有名称,因此在这种情况下,Oracle会为此约束分配一个自动生成的名称.但您可以使用以下CONSTRAINT语法显式设置此约束的名称:

cod_dept    INTEGER CONSTRAINT dept_key PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)

稍后可以使用此名称来引用约束,例如,删除或修改它:

ALTER TABLE department DROP CONSTRAINT dept_key;
Run Code Online (Sandbox Code Playgroud)

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