本关任务: 在借阅表(borrow)和读者表(reader)之间设置参照完整性 为了完成本关任务,你需要掌握: 如何在数据表之间设置参照完整性 相关知识 在数据表之间增加参照完整性的命令如下所示 alter table <子表> add [CONSTRAINT <外键名>] FOREIGN KEY <字段名> REFERENCES <主表> <主键列> on delete restrict|cascade|set null on update delete restrict|cascade|set null 在设置参照完整性后, 当主表中没有相关数据时,子表中无法插入对应的记录。 如果delete设置为cascade, 在删除主表数据的时候,子表的数据将同时被删除; 如果delete设置为restrit, 子表中存在数据时,主表的数据将无法删除 如果delete设置为set null, 在删除主表数据的时候,子表的数据被设置为null值 (该列可以设置为null值的情况下) 如果update设置为cascade, 在修改主表的关键字段的值的时候,子表中相关数据的字段的值将同时被修改; 如果update被设置为restrit, 子表中存在数据时,主表的相关数据的关键字段的值将无法修改 如果update设置为set null, 在修改主表的关键字段的值的时候,子表中相关数据的字段的值将被设置为null (该列可以设置为null值的情况下) 本关任务 在借阅表和读者表设置参照完整性 当删除读者表的数据时,借阅表的相关记录一起删除 当修改读者表的读者证号时,借阅表的相关记录的读者证号一起被修改
时间: 2024-02-20 22:00:18 浏览: 218
您可以使用以下命令在借阅表(borrow)和读者表(reader)之间设置参照完整性:
```
ALTER TABLE borrow ADD CONSTRAINT borrow_reader_fk
FOREIGN KEY (reader_id) REFERENCES reader (reader_id)
ON DELETE CASCADE ON UPDATE CASCADE;
```
这将会在borrow表上添加一个名为borrow_reader_fk的外键,它将确保reader_id列的值只能来自于reader表中的reader_id列,并且在删除或修改reader表中的reader_id列时,borrow表中相关的reader_id列也会被删除或修改。
请注意,添加参照完整性可能会影响到您的应用程序或其他查询,因此在执行此操作之前请确保备份好您的数据表。
相关问题
在借阅表(borrow)和读者表(reader)之间设置参照完整性当删除读者表的数据时,借阅表的相关记录一起删除 当修改读者表的读者证号时,借阅表的相关记录的读者证号一起被修改
好的,您可以使用以下 SQL 语句来在借阅表和读者表之间设置参照完整性:
```
ALTER TABLE borrow
ADD CONSTRAINT borrow_reader_fk
FOREIGN KEY (reader_id)
REFERENCES reader (reader_id)
ON DELETE CASCADE
ON UPDATE CASCADE;
```
这条语句会向借阅表 borrow 添加一个名为“borrow_reader_fk”的外键约束,该约束将 borrow 表的“reader_id”字段与 reader 表的“reader_id”字段关联起来。其中,ON DELETE CASCADE 表示当删除 reader 表中的记录时,所有相关的 borrow 表中的记录也会被删除;ON UPDATE CASCADE 表示当 reader 表中的记录的“reader_id”字段值发生更改时,所有相关的 borrow 表中的“reader_id”字段值也会被更新。
请注意,这些约束只能在数据库支持外键约束的情况下使用。同时,为了确保完整性约束的有效性,请确保 borrow 表中的所有“reader_id”字段值都在 reader 表中存在。
另外,如果您需要在 reader 表中修改读者证号时,可以使用以下 SQL 语句来更新 borrow 表中相关记录的读者证号:
```
UPDATE borrow
SET reader_id = '新的读者证号'
WHERE reader_id = '旧的读者证号';
```
这条语句会将 borrow 表中所有“reader_id”字段值为“旧的读者证号”的记录的“reader_id”字段值更新为“新的读者证号”。请注意,这种方式需要手动执行 SQL 语句来更新数据,因此在使用之前请确保您已经备份了数据,并且了解了更新操作可能带来的风险。
帮我用sql写一个学校图书借阅管理系统 要求是学校图书借阅管理系统 (1)功能要求 ①实现图书信息、类别、出版社等信息的管理; ②实现读者信息、借阅信息的管理; ③实现图书的借阅、续借、归还管理; ④实现超期罚款管理、收款管理; (2)数据要求 ①创建触发器,分别实现借书和还书时自动更新图书信息的在册数量; ②创建视图查询各种图书的书号、书名、总数和在册数; ③创建存储过程查询指定读者借阅图书的情况; ④建立数据库相关表之间的参照完整性约束
好的,下面是一个简单的学校图书借阅管理系统的 SQL 实现,包括创建表、触发器、视图和存储过程:
创建图书信息表:
```sql
CREATE TABLE books (
id INT PRIMARY KEY,
name VARCHAR(100),
category VARCHAR(50),
publisher VARCHAR(50),
total INT,
stock INT
);
```
创建读者信息表:
```sql
CREATE TABLE readers (
id INT PRIMARY KEY,
name VARCHAR(50),
gender CHAR(1),
phone VARCHAR(20),
email VARCHAR(50)
);
```
创建借阅信息表:
```sql
CREATE TABLE borrowings (
id INT PRIMARY KEY,
book_id INT,
reader_id INT,
borrow_date DATE,
return_date DATE,
overdue_fine DECIMAL(10,2),
payment_status CHAR(1),
FOREIGN KEY (book_id) REFERENCES books(id),
FOREIGN KEY (reader_id) REFERENCES readers(id)
);
```
创建触发器,实现借书和还书时自动更新图书信息的在册数量:
```sql
CREATE TRIGGER update_stock_on_borrow
AFTER INSERT ON borrowings
FOR EACH ROW
UPDATE books SET stock = stock - 1 WHERE id = NEW.book_id;
CREATE TRIGGER update_stock_on_return
AFTER UPDATE ON borrowings
FOR EACH ROW
UPDATE books SET stock = stock + 1 WHERE id = NEW.book_id;
```
创建视图,查询各种图书的书号、书名、总数和在册数:
```sql
CREATE VIEW book_info AS
SELECT id, name, category, publisher, total, stock FROM books;
```
创建存储过程,查询指定读者借阅图书的情况:
```sql
CREATE PROCEDURE reader_borrowings (IN reader_id INT)
BEGIN
SELECT b.id, b.name, b.borrow_date, b.return_date, b.overdue_fine, b.payment_status
FROM borrowings AS b
WHERE b.reader_id = reader_id;
END;
```
创建表之间的参照完整性约束:
```sql
ALTER TABLE borrowings ADD CONSTRAINT fk_book_id FOREIGN KEY (book_id) REFERENCES books(id);
ALTER TABLE borrowings ADD CONSTRAINT fk_reader_id FOREIGN KEY (reader_id) REFERENCES readers(id);
```
这是一个简单的示例,实际的学校图书借阅管理系统可能需要更多的表和功能。
阅读全文