- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章 约束 约束是每个数据库必不可少的一部分。约束的根本目的在于保持数据的完整性。数据完整性,是指数据的精确性和可靠性。即数据库中的数据都是符合某种预定义规则。当用户输入的数据不符合这些规则时,将无法实现对数据库的更改。 主键约束; 外键约束; 唯一性约束; 检查约束; 默认值约束。 6.1 主键约束 主键约束是数据库中最常见的约束。主键约束可以保证数据完整性。即防止数据表中的两条记录完全相同,通过将主键纳入查询条件,可以达到查询结果最多返回一条记录的目的。 6.1.1 主键简介 主键被创建在一个或多个列上,通过这些列的值或者值的组合,唯一地标识一条记录。例如,对于存储了学生信息的student表,一般会为每个学生分配一个student_id,也就是说将主键建立在student_id这个列上。student_id将成为每个学生的唯一标识。当向student表中插入新的学生信息时,如果要插入的student_id已经存在,数据库将拒绝插入该条记录。这就是主键保证数据完整性的体现。对于主键,有以下几点需要注意。 主键列的数据类型并不一定是数值型。 主键列不一定只有一列。 主键是规则制定者的意志体现,不要将其与现实世界混淆。 6.1.2 创建主键约束 1.创建主键约束 Create table only_test (id number primary key, name varchar2(20)); 2.测试主键约束 insert into only_test values (1, Allen) insert into only_test values (1, Bob); 6.1.3 修改表的主键约束 表的主键也是作为表的对象存在的,因此,同样可以对其进行修改。这其中包括,为表添加主键,删除主键、启用/禁用主键、重命名主键等。 1.为表添加主键 alter table only_test add primary key (id) 2.为表添加多列主键 alter table only_test add primary key (id, name) 3.删除主键 alter table only_test drop primary key 4.启用/禁用主键 Alter table only_test disable primary key 5.重命名主键 6.1.4 主键应用场景 1.对于完整性要求比较高的数据表都应该建立主键 2.对于经常按照某列进行查询的数据表,应该考虑建立主键 3.考虑是否对外键有利 6.2 外键约束 外键与主键一样用于保证数据完整性,主键是针对单个表的约束,而外键则描述了表之间的关系。即两个表之间的数据的相互依存性。 6.2.1 外键简介 外键实际是一种关联,描述了表之间的父子关系。即子表中的某条数据与父表中的某条数据有着依附关系。当父表中的某条数据被删除或进行更改时,会影响子表中的相应数据。例如,父表中的数据被删除,则子表中的相应数据也应该被删除;当父表中的数据进行更新,子表中的数据也应该做出适当的反应。 外键约束是建立在子表之上的,并要求子表的每条记录必须在父表中有且仅有一条记录与之对应。例如,某条order记录,没有对应的customer的信息,是不允许的,亦即一张订单没有客户是不允许的。 6.2.2 创建外键约束 1.建立外键 alter table orders add constraint fk_orders_customers foreign key (customer_id) references customers (customer_id) 2.验证外键约束的有效性 insert into orders (order_id, customer_id, goods_name, quantity, unit) values (1, 1, FABRIC, 20, BMP) 6.2.3 级联更新与级联删除 在具有外键的情形下,尝试修改主表中的数据并不一定能够成功。但是有时又的确有这种需求,即修改主表中的主键列的值。当然,子表中的数据也应该同时更新。对于主表中的记录删除亦是如此。但是因为外键约束,造成了两种操作都不能成功进行。这就是级联更新与级联删除问题的提出背景。 1.级联更新 alter table orders add constraint fk_orders_customers foreign key (customer_id) references customers (customer_id) deferrable initially deferred 2.级联删除 alter table orders add constraint fk_orders_cu
文档评论(0)