为维护数据库的完整性,数据库管理系统必须能够实现如下功能:
- 提供定义完整性约束条件的机制
- 提供完整性检查的方法
- 进行违约处理
所以我们要使用规范的SQL语句来创建数据库表:
- 在建表时声明主关键字和外关键字的约束名
- 被参照表中的列必须是该表中的主关键字组成部分,否则
ORACLE
将不产生外关键字 - 对主关键字有许多限制。首先,作为主关键字组成部分的列不能为
NULL
;其次,定义为LONG
或LONG 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语句的理解,你已经可以创建一个规范的表啦。创建一个规范的表通常要在直观的表上添加三个部分:主键约束,外键约束,检查。
标签:语句,SNO,数据库,SQL,约束,VARCHAR2,表中,CNO,主键 From: https://www.cnblogs.com/yonuyeung/p/17295680.html