在数据库学习的PPT中,第二部分着重讲解了数据库完整性规则和SQL语句的使用,特别是在设计和操作两个关键表:book和bookCategory。这两个表分别为书籍信息和类别信息,包含字段如bookid、isbn、bookname、catid、authors和publishervachar2等。
首先,我们来看表结构:
1. 表book:
- bookid: 整型,主键,保证唯一性
- isbn: varchar2(50),校验长度大于3,用于书籍国际标准书号
- bookname: varchar2(200),唯一且非空,存储书籍名称
- catId: 整型,外键引用bookCategory表中的categoryId
- authors: varchar2(200),存储作者信息
- publisher: varchar2(500),存储出版社信息
2. 表bookCategory:
- categoryId: 整型,主键
- categoryName: varchar2(100),存储类别名称
- parentCategoryId: 整型,外键,如果为NULL表示顶级类别
- cate_desc: varchar2(500),描述性文本
接下来是关于插入记录的部分,根据提供的SQL语句,我们可以分析如下:
- 第一条和第二条SQL语句是正确的,分别插入两个category记录:
```
insert into category(categoryid,categoryname) values(1,’cat1’);
insert into category(categoryid,categoryname) values(2,’cat2’);
```
这两个语句没有错误,因为它们符合表category的定义,并且categoryid是唯一的。
- 第三条SQL语句试图将bookid为1的书籍信息('aaa', 3)插入bookInfo表中,语法正确,但可能存在逻辑错误,因为bookCategory表中还没有categoryid为3的记录,这会导致违反外键约束(fk_book_ref_category)。
- 第四条SQL语句尝试插入一个bookname为'aaa'且catid为NULL的记录,这是错误的,因为bookname字段需要非空,并且类别ID不能为NULL,除非是在插入书籍时还未关联到任何类别。
- 第五条至第八条SQL语句,尝试插入bookid为1和2的书籍记录,其中bookid为1的记录关联了categoryid为2,而bookid为2的记录也关联了categoryid为2。这些语句在数据不存在的情况下可能会失败,因为它们依赖于已有数据的存在。
- 第九条和第十条SQL语句尝试插入bookid为10和11的记录,同样可能存在同样的问题,即缺少对应类别的先期插入记录。
- 最后一条SQL语句插入了一个新的book记录,bookid为15,isbn为'a',bookname为'xxx',这个语句本身没有错误,但可能在实际应用中需要确认是否有相应的isbn值存在。
总结来说,这个PPT主要展示了如何在数据库中维护表结构的完整性,并通过SQL语句进行记录的插入。需要注意的是,在执行这些SQL语句时,必须遵循表间的关系约束,尤其是外键约束,确保数据的一致性和完整性。如果遇到错误,可能是由于违反了预设的完整性规则或依赖于其他未插入的数据。