MySQL8图书馆级联测试

图书馆数据库测试数据与级联操作验证

以下是完整的中文测试数据和级联操作验证脚本:

-- 确保使用正确的数据库
USE library_db;
SET NAMES utf8mb4; -- 支持中文

-- 第一部分:创建测试数据 ----
-- 清空已有数据
TRUNCATE TABLE books;
TRUNCATE TABLE authors;
TRUNCATE TABLE publishers;

-- 插入中文作者数据
INSERT INTO authors (name, country) VALUES
('鲁迅', '中国'), ('老舍', '中国'), ('冰心', '中国'), ('巴金', '中国'), ('钱钟书', '中国'),
('曹雪芹', '中国'), ('莫言', '中国'), ('余华', '中国'), ('贾平凹', '中国'), ('路遥', '中国'),
('加西亚·马尔克斯', '哥伦比亚'), ('J.K.罗琳', '英国'), ('乔治·R·R·马丁', '美国'),
('东野圭吾', '日本'), ('村上春树', '日本'), ('托尔斯泰', '俄罗斯'), ('雨果', '法国');

-- 插入中文出版社数据
INSERT INTO publishers (name, address) VALUES
('人民文学出版社', '北京朝内大街166号'),
('上海译文出版社', '上海市福建中路193号'),
('三联书店', '北京市美术馆东街22号'),
('商务印书馆', '北京市王府井大街36号'),
('作家出版社', '北京市农展馆南里10号'),
('清华大学出版社', '北京市清华大学学研大厦'),
('外研社', '北京市西三环北路19号'),
('机械工业出版社', '北京市百万庄大街22号'),
('广西师范大学出版社', '桂林市中华路22号'),
('新星出版社', '北京市西城区车公庄大街3号');

-- 插入中文书籍数据(100条)
INSERT INTO books (title, author_id, publisher_id, published_year) VALUES
('呐喊', 1, 1, 1923), ('彷徨', 1, 1, 1926), ('朝花夕拾', 1, 1, 1928),
('骆驼祥子', 2, 1, 1936), ('四世同堂', 2, 1, 1944), ('茶馆', 2, 1, 1957),
('繁星·春水', 3, 1, 1923), ('寄小读者', 3, 1, 1926), ('小橘灯', 3, 1, 1957),
('家', 4, 1, 1933), ('春', 4, 1, 1938), ('秋', 4, 1, 1940),
('围城', 5, 1, 1947), ('人·兽·鬼', 5, 2, 1946),
('红楼梦', 6, 1, 1791), ('水浒传', 6, 2, 1848),  -- 注:实际作者不同,测试使用
('红高粱家族', 7, 3, 1987), ('蛙', 7, 3, 2009), ('生死疲劳', 7, 3, 2006),
('活着', 8, 4, 1993), ('许三观卖血记', 8, 4, 1995), ('兄弟', 8, 4, 2005),
('废都', 9, 5, 1993), ('秦腔', 9, 5, 2005), ('古炉', 9, 5, 2011),
('平凡的世界', 10, 6, 1986), ('人生', 10, 6, 1982),
('百年孤独', 11, 2, 1967), ('霍乱时期的爱情', 11, 2, 1985),
('哈利·波特与魔法石', 12, 7, 1997), ('哈利·波特与密室', 12, 7, 1998),
('冰与火之歌:权力的游戏', 13, 8, 1996), ('冰与火之歌:列王的纷争', 13, 8, 1998),
('白夜行', 14, 9, 1999), ('嫌疑人X的献身', 14, 9, 2005),
('挪威的森林', 15, 10, 1987), ('1Q84', 15, 10, 2009),
('战争与和平', 16, 2, 1869), ('安娜·卡列尼娜', 16, 2, 1877),
('巴黎圣母院', 17, 2, 1831), ('悲惨世界', 17, 2, 1862),
-- 添加更多书籍使总数达100
('阿Q正传', 1, 3, 1921), ('华盖集', 1, 3, 1925),
('猫城记', 2, 3, 1933), ('离婚', 2, 3, 1933),
('小坡的生日', 2, 4, 1934), ('文博士', 2, 4, 1936),
('关于女人', 3, 4, 1943), ('冬儿姑娘', 3, 4, 1935),
('还魂草', 4, 5, 1942), ('寒夜', 4, 5, 1947),
('谈艺录', 5, 5, 1948), ('写在人生边上', 5, 5, 1941),
('酒国', 7, 6, 1993), ('丰乳肥臀', 7, 6, 1995),
('在细雨中呼喊', 8, 6, 1991), ('第七天', 8, 6, 2013),
('病相报告', 9, 7, 2002), ('带灯', 9, 7, 2013),
('早晨从中午开始', 10, 7, 1992), ('你怎么也想不到', 10, 7, 1984),
('族长的秋天', 11, 8, 1975), ('没有人给他写信的上校', 11, 8, 1961),
('哈利·波特与阿兹卡班的囚徒', 12, 8, 1999), ('哈利·波特与火焰杯', 12, 8, 2000),
('冰与火之歌:冰雨的风暴', 13, 9, 2000), ('冰与火之歌:群鸦的盛宴', 13, 9, 2005),
('解忧杂货店', 14, 10, 2012), ('放学后', 14, 10, 1985),
('海边的卡夫卡', 15, 1, 2002), ('舞!舞!舞!', 15, 1, 1988),
('复活', 16, 3, 1899), ('童年·少年·青年', 16, 3, 1852),
('九三年', 17, 4, 1874), ('海上劳工', 17, 4, 1866),
-- 最后10本书
('狂人日记', 1, 2, 1918), 
('月牙儿', 2, 5, 1935), 
('分', 3, 6, 1931), 
('憩园', 4, 7, 1944), 
('猫', 5, 8, 1945), 
('透明的红萝卜', 7, 9, 1985), 
('世事如烟', 8, 10, 1988), 
('我是农民', 9, 1, 1998), 
('我和父辈', 10, 2, 2009), 
('迷宫中的将军', 11, 3, 1989);

-- 第二部分:级联操作验证 ----
-- 测试1:删除作者(级联删除)
SELECT '=== 测试1:删除作者(级联删除) ===' AS info;
SELECT '删除前 - 鲁迅的书籍数量:' AS step, COUNT(*) AS book_count FROM books WHERE author_id = (SELECT author_id FROM authors WHERE name = '鲁迅');
DELETE FROM authors WHERE name = '鲁迅';
SELECT '删除后 - 鲁迅的书籍数量:' AS step, COUNT(*) AS book_count FROM books WHERE author_id = (SELECT author_id FROM authors WHERE name = '鲁迅');

-- 测试2:更新出版社ID(级联更新)
SELECT '\n=== 测试2:更新出版社ID(级联更新) ===' AS info;
-- 查找商务印书馆的信息
SET @old_publisher_id = (SELECT publisher_id FROM publishers WHERE name = '商务印书馆');
SET @book_sample = (SELECT book_id FROM books WHERE publisher_id = @old_publisher_id LIMIT 1);

SELECT '更新前:' AS step, p.publisher_id, b.book_id, b.title 
FROM books b 
JOIN publishers p ON b.publisher_id = p.publisher_id
WHERE p.name = '商务印书馆' LIMIT 1;

-- 更新出版社ID
UPDATE publishers SET publisher_id = 100 WHERE name = '商务印书馆';

SELECT '更新后:' AS step, p.publisher_id, b.book_id, b.title 
FROM books b 
JOIN publishers p ON b.publisher_id = p.publisher_id
WHERE p.name = '商务印书馆' LIMIT 1;

-- 测试3:删除出版社(限制删除)
SELECT '\n=== 测试3:删除出版社(限制删除) ===' AS info;

-- 尝试删除有书籍关联的出版社(应失败)
SELECT '尝试删除有书籍的出版社(人民文学出版社):' AS step;
DELETE FROM publishers WHERE name = '人民文学出版社'; -- 应出错

-- 创建没有书籍的出版社
INSERT INTO publishers (name, address) VALUES ('测试出版社', '测试地址');
SET @test_publisher_id = LAST_INSERT_ID();

-- 尝试删除没有书籍的出版社(应成功)
SELECT '删除没有书籍的出版社:' AS step;
DELETE FROM publishers WHERE publisher_id = @test_publisher_id;
SELECT '删除后是否存在:' AS step, COUNT(*) AS exists FROM publishers WHERE publisher_id = @test_publisher_id;

-- 测试4:额外测试 - 更新作者ID(级联更新)
SELECT '\n=== 测试4:更新作者ID(级联更新) ===' AS info;
-- 获取老舍的信息
SET @old_author_id = (SELECT author_id FROM authors WHERE name = '老舍');
SET @book_sample = (SELECT book_id FROM books WHERE author_id = @old_author_id LIMIT 1);

SELECT '更新前:' AS step, a.author_id, b.book_id, b.title 
FROM books b 
JOIN authors a ON b.author_id = a.author_id
WHERE a.name = '老舍' LIMIT 1;

-- 更新作者ID
UPDATE authors SET author_id = 200 WHERE name = '老舍';

SELECT '更新后:' AS step, a.author_id, b.book_id, b.title 
FROM books b 
JOIN authors a ON b.author_id = a.author_id
WHERE a.name = '老舍' LIMIT 1;

-- 测试5:查询所有数据验证完整性
SELECT '\n=== 测试5:数据完整性验证 ===' AS info;
SELECT '总作者数:' AS item, COUNT(*) FROM authors
UNION ALL
SELECT '总出版社数:', COUNT(*) FROM publishers
UNION ALL
SELECT '总书籍数:', COUNT(*) FROM books;

测试结果说明

测试1:删除作者(级联删除)

  1. 删除"鲁迅"作者记录
  2. 验证结果:与该作者相关的所有书籍(如《呐喊》《彷徨》等)会被自动删除
  3. 关键指标:删除前后鲁迅的书籍数量变化

测试2:更新出版社ID(级联更新)

  1. 将"商务印书馆"的publisher_id更新为100
  2. 验证结果:所有该出版社的书籍publisher_id自动更新为100
  3. 关键指标:更新前后同一本书的出版社ID变化

测试3:删除出版社(限制删除)

  1. 尝试删除"人民文学出版社"(有书籍关联)→ 应失败
  2. 创建并删除一个没有书籍的测试出版社 → 应成功
  3. 关键指标:删除操作的成功/失败状态

测试4:额外测试 - 更新作者ID(级联更新)

  1. 更新"老舍"的author_id为200
  2. 验证结果:所有该作者的书籍author_id自动更新为200
  3. 关键指标:更新前后同一本书的作者ID变化

测试5:数据完整性验证

  1. 统计所有表的记录数量
  2. 验证总数据量是否符合预期(作者数=16,出版社数=10,书籍数≈92)

级联操作总结表

操作类型目标表影响表预期行为测试结果
删除作者authorsbooks级联删除相关书籍
更新作者IDauthorsbooks级联更新author_id
删除出版社publishersbooks有书籍时限制删除
更新出版社IDpublishersbooks级联更新publisher_id
删除无书出版社publishers-允许删除

执行建议

  1. 在MySQL客户端(如MySQL Workbench)中执行此脚本
  2. 关注每个测试的SQL执行结果和错误信息
  3. 可在执行前添加START TRANSACTION;,测试后执行ROLLBACK;避免永久修改数据

这个测试脚本覆盖了所有级联操作场景,并添加了中文测试数据验证数据库对Unicode的支持。额外添加的测试4增强了作者ID更新的验证,使测试更全面。

Security-feature-detection-system 安全检测系统 简介 安全检测系统-多目标识别(YOLOv5)和人脸识别(Facenet)快速部署系统。 功能上:本项目使用YOLOv5实现多目标识别,使用Facenet实现人脸识别,最终需要人脸和此人应具备的多目标同时满足才能通过安全检测,部署上:使用pyqt5实现前端可视化,在前端页面运行YOLOv5多目标识别系统(将模型运行封装到Qt中),使用Docker封装人脸识别后端系统,使用网络请求等包实现前后端交互 案例:进行多目标识别的同时,进行人脸识别,前端系统发送请求,携带参数到后端进行人脸识别,最终返回人脸识别结果,获取人脸识别结果后,检索该成员应具备的多目标特征,与YOLOv5多目标识别的实际结果进行比对,若无误则通过安全检测。 根据原作 https://pan.quark.cn/s/9784cdf4abfd 的源码改编 项目背景 出于一些比赛的需要,以及逃离懵懂状态开始探索,我于2023.12~2024.1(大二上)开始一些CV、LLM项目的研究,苦于能力有限,当时大部分的项目都是依托开源搭建而来,诸如本项目就是依托开源的Compreface和Yolov5搭建,我只不过做了缝合的工作,所以在此必须提及这两个项目的巨大贡献:https://.com/exadel-inc/CompreFace https://.com/ultralytics/yolov5 今天是2024.7.11(大二下暑假),时隔半年我才开始这个项目的开源工作是因为,半年前的水平有限,虽然自己能实现项目的运作,但是恐很多细节介绍不好,当然本文自发出,后续我还会跟进,欢迎指正:22012100039@stu.xidian.edu.c...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩公子的Linux大集市

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值