代码概述
本题要求创建借阅表 `borrow`,需定义主码和外码(关联图书表与读者表),设置“是否续借”字段默认值为 `'F'`,并确保数据完整性。还书时间为 NULL 表示未还。创建后插入指定的 10 条借阅记录。
代码解析
```sql
-- 创建表 borrow
CREATE TABLE borrow (
borrow_id INT PRIMARY KEY, -- 借书编号为主码
book_id VARCHAR(10) NOT NULL, -- 图书编号,外键引用 book(book_id)
reader_id VARCHAR(12) NOT NULL, -- 读者编号,外键引用 reader(reader_id)
borrow_time DATETIME NOT NULL, -- 借书时间,含时分秒
due_date DATE NOT NULL, -- 应还时间
return_time DATETIME, -- 还书时间,可为空(表示未还)
is_renewed CHAR(1) DEFAULT 'F' NOT NULL CHECK (is_renewed IN ('T', 'F')) -- 是否续借,默认F,只能取'T'或'F'
-- 定义外键约束
CONSTRAINT fk_book FOREIGN KEY (book_id) REFERENCES book(book_id),
CONSTRAINT fk_reader FOREIGN KEY (reader_id) REFERENCES reader(reader_id)
);
```
```sql
-- 插入题目中给出的数据
INSERT INTO borrow (borrow_id, book_id, reader_id, borrow_time, due_date, return_time, is_renewed) VALUES
(1, 'B1002', '202221213061', '2024-09-15 09:09:09', '2024-12-14', '2024-12-14 17:17:17', 'T'),
(2, 'B1001', '202221213061', '2024-12-12 11:11:11', '2025-02-11', '2025-01-10 15:15:15', 'F'),
(3, 'C1234', '202121086031', '2025-03-02 12:12:12', '2025-05-01', '2025-04-05 14:14:14', 'F'),
(4, 'B0001', '21086001', '2025-03-05 10:10:10', '2025-06-05', '2025-05-04 16:16:16', 'F'),
(5, 'C1001', '21086001', '2025-07-03 13:13:13', '2025-12-02', NULL, 'T'),
(6, 'B1002', '202321213033', '2025-07-05 14:14:14', '2025-10-04', NULL, 'F'),
(7, 'C1234', '202221213061', '2025-07-06 13:14:15', '2025-10-05', NULL, 'T'),
(8, 'C1234', '202321213033', '2025-09-05 15:15:15', '2025-12-04', NULL, 'F'),
(9, 'C1001', '202121086031', '2025-09-13 16:16:16', '2025-12-12', NULL, 'F'),
(10, 'B1002', '21086001', '2025-09-15 17:17:17', '2026-02-14', NULL, 'T');
```
知识点
1. **FOREIGN KEY 约束**:用于建立表间关系,保证引用的记录在主表中存在,维护数据一致性。
2. **DEFAULT 默认值**:当字段未提供值时使用默认值,如 `is_renewed` 默认为 `'F'`。
3. **CHECK 约束**:限制字段取值范围,如 `is_renewed` 只能是 `'T'` 或 `'F'`。