第12章约束 频繁更新是数据库的显著特征之一。而这种更新也带来了 巨大的风险——数据的可靠性变得复杂和难以控制。试图通过 人工方式来保证数据库的数据可靠性是不现实的。Oracle中的 约束正是解决这一问题的优秀策略。约束用于保证数据库数据 的完整性和可靠性。 Oracle的主要约束包括: 主键约束 外键约束 唯一性约束 检查约束 默认值约束 非空约束
—— Oracle Oracle
12.1主键约束 主键约束是Oracle数据库的最常用约束,也是数据库设 计者最需要注意的约束。主键的作用是用来保证数据的完整 性。主键可以像普通数据库对象那样进行创建、修改、删除 等操作。本节将着重讲述主键的创建、使用及相关操作
Oracle
12.1.1为什么要使用主键 在数据表设计时,数据表一般要求满足BCNF范式。这 要求数据表至少含有一个候选码(可看作唯一性约束)。而 其中一个候选码又被选为主码。这里的主码,可以看做数据 表的主键。 除了数据表设计的一般规则之外,主键的出现还有以 下现实意义。 1.防止出现重复数据一实体完整性 2.检索有利 3.支持外键
BCNF 1 —— 2 3
12.1.1为什么要使用主键 员工ID 员工姓名 员工年龄 员工职位 员工姓名 员工年龄 员工职位 35 1 王晓 35 王晓 开发经理 开发经理 钟小平 30 高级工程师 2 钟小平 30 高级工程师 刘俊 25 工程师 刘俊 25 工程师 刘俊 工程师 刘俊 25 工程师 钟文 24 工程师 5 钟文 24 工程师
员工姓名 王晓 钟小平 刘俊 刘俊 钟文 员工职位 开发经理 工程师 工程师 工程师 高级工程师 员工年龄 35 25 25 24 30 员工姓名 王晓 钟小平 刘俊 刘俊 钟文 员工职位 开发经理 工程师 工程师 工程师 高级工程师 员工年龄 35 25 25 24 30 员工ID 1 2 4 5 3
12.1.2主键简介 主键的来源是主码,而一个关系变量的主码来源于候 选码。本小节将结合数据库理论对主键进行分析。 1.主键列的数据类型并不一定是数值型 2.主键不一定只有一列 3.为什么是单列主键 4.为什么是自增的数值型主键 5.为什么主键值不能为空
12345
12.1.3创建主键约束 对于数据表来说,主键约束和列具有相同的地位 都是依附于表存在的对象。因此,创建主键约束可以在创建 表时与表的列描述同时进行,也可以在表创建成功之后,手 动进行添加。 1.创建表的同时,定义主键约束 2.创建表后,添加主键约束 3.为主键命名 4.测试主键的作用
—— 1234
12.1.5主键与索引 索引是数据库提供的一种可以用于提高数据性能的机 制。当用户在数据表的某列(或某些列)上创建了主键、而 在检索数据时又使用了该索引列,Oracle可以很快的捕获符 合条件的记录。而不必采用全表逐条扫描的方式。有关索引 的详细信息,可以参考第18.2节内容。 【示例12-13】在0 racle中,创建了主键之后,都会存 在一个建立在主键列上的索引。例如,表employees的主键 pk_employees建立在列employee_.id上。我们可以通过视图 user_indexes获得表employees_上索引的详细信息。 SQL>select table_name,index_name,index_type from user indexes u 2 where u.table name ='EMPLOYEES';
Oracle 18.2 12-13 Oracle employees pk_employees employee_id user_indexes employees SQL> select table_name, index_name, index_type from user_indexes u 2 where u.table_name = 'EMPLOYEES';
12.1.6总结 主键是数据库设计者最应关注的约束。一般来说,一 个拥有良好设计的数据表,往往有一个与业务无关的主键。 主键可以保证数据表中数据的唯一性,并且可以在主键列上 创建索引。 主键特点 说明 数据库操作与相关视图 约束 主键是约束的一种 user_constraints,user cons columns 主键的唯一性 主键是主码的体现 删除主键时,无需提供主键名称 主键的值不能为空 无法通过id-nul的条件来获得记录 禁止向主键列中插入空值null 主键与唯一性约束 主码来源于吗 禁止向主键列中插入重复数据(或组合) 主键与索引 主键将保证主键列上有索引 user indexes,user ind columns