使用SQL语句创建数据库表

为维护数据库的完整性,数据库管理系统必须能够实现如下功能:

  • 提供定义完整性约束条件的机制
  • 提供完整性检查的方法
  • 进行违约处理

所以我们要使用规范的SQL语句来创建数据库表:

  • 在建表时声明主关键字和外关键字的约束名
  • 被参照表中的列必须是该表中的主关键字组成部分,否则ORACLE将不产生外关键字
  • 对主关键字有许多限制。首先,作为主关键字组成部分的列不能为NULL;其次,定义为LONGLONG RAW的列不能是主关键字的组成部分;第三,主关键字的列最多只能有16列

以上的规则看不太懂是不是,没关系,我们用实例来解释一下。

创建下面这张表

 

 我们先用最简单的想法去创建一个表,再逐渐添加功能

CREATE TABLE S
(
    SNO    VARCHAR2(2),
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4)
);

 

1.添加主键约束

CREATE TABLE S
(
    SNO    VARCHAR2(2) PRIMARY KEY,
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4)
);

将SNO列定义为主键约束的作用是将该列作为表S的主键,主键是用于标识表中每个行的唯一标识符。主键的作用是确保表中每行的唯一性,可以通过主键来避免表中出现重复的行。

在该示例中,将SNO列定义为主键约束的方式是在列定义后添加PRIMARY KEY关键字。这意味着在表格中,每个行的SNO列都必须包含唯一的值。如果插入了两个具有相同SNO值的行,将无法插入第二个行,因为它将与第一个行产生主键冲突。

另外,定义主键约束的列通常会自动创建索引,以提高主键列的查询效率。在上述示例中,SNO列的主键约束将自动创建一个名为S_PK的索引。

总之,主键约束是确保表中每行的唯一性的一种方法。它可以确保表中没有重复行,并且可以提高查询效率。

书上的写法是下面这种,它给约束赋予了一个约束名,注意括号:

CREATE TABLE S
(
    SNO    VARCHAR2(2) ,
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4),
    CONSTRAINT PK_SNO PRIMARY KEY (SNO)    
);

 

2.添加外键约束

CREATE TABLE S
(
    SNO    VARCHAR2(2) PRIMARY KEY,
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4),
    CNO    VARCHAR2(2),
    FOREIGN KEY (CNO) REFERENCES C (CNO)
);

外键约束着手于解决定义参照完整性的问题。在这个例子中,S表中有一个名为CNO的列,它被定义为外键列,并参照了另一个名为C表中的CNO列。这个外键约束的作用是确保S表中的每个CNO值都存在于C表中的CNO列中。也就是说,如果在S表中插入一个CNO值,但在C表中不存在相应的CNO值,则插入操作将被拒绝,并引发外键约束错误。

举个例子,如果在S表中插入一行记录,其中CNO列的值为"01",但在C表中并不存在CNO为"01"的行,这个插入操作将被拒绝,并报告外键约束错误。这个约束确保了S表中的CNO值与C表中的CNO值一致,保证了数据的完整性和一致性。

在这个例子中,外键约束还可以有其他约束选项,例如ON DELETE CASCADE和ON UPDATE CASCADE。这些选项指定当C表中的主键行被删除或更新时,S表中的相关行应该如何处理。例如,ON DELETE CASCADE选项将指示数据库删除S表中相关行,以确保数据的一致性。

书上的写法是这种,同样是赋予了一个约束名,注意括号:

CREATE TABLE S
(
    SNO    VARCHAR2(2) PRIMARY KEY,
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4),
    CNO    VARCHAR2(2),
    CONSTRAINT FK_SNO FOREIGN KEY (CNO) REFERENCES C (CNO)
);

 

3.添加检查约束

CREATE TABLE S
(
    SNO    VARCHAR2(2),
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4),
    CHECK (SNO LIKE 'S%')
);

这个例子中,S表中的SNO列定义了一个检查约束,该约束要求SNO列中的所有值都以字符“S”开头。也就是说,如果在S表中插入一行记录,其中SNO列的值不以字符“S”开头,则插入操作将被拒绝,并引发检查约束错误。

检查约束是一种用于强制执行数据完整性的机制,它要求在插入或更新数据时对其进行特定的检查。在这个例子中,检查约束确保S表中的SNO列中的所有值都符合特定的模式。这可以有效地防止插入无效或不合法的数据。

需要注意的是,检查约束并不是一个必需的约束,因为可以在应用程序层面对数据进行检查。但是,在数据库层面定义检查约束可以确保数据的完整性和一致性,减少应用程序层面的错误处理和数据处理的负担。

书上的写法是这种,同样赋予了约束名:

CREATE TABLE S
(
    SNO    VARCHAR2(2),
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4),
    CONSTRAINT CHK_SNO CHECK (SNO LIKE 'S%')
);

 

4.添加唯一约束

CREATE TABLE S
(
    SNO    VARCHAR2(2) UNIQUE,
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4)
);

用于确保列中的值是唯一的,但可以包含NULL值。

 

总结:通过对以上SQL语句的理解,你已经可以创建一个规范的表啦。创建一个规范的表通常要在直观的表上添加三个部分:主键约束,外键约束,检查。

posted @ 2023-04-07 11:35  yonuyeung  阅读(334)  评论(0)    收藏  举报