理解SQL(Oracle)创建表代码时遇到问题
我了解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
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约束)
创建表
指令之后编写以下内容
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,因为我还有一个问题。约束名称在架构(或用户)中是唯一的,而不是数据库。