数据库课堂代码
第四章
4.1 查看MySQL服务器中的已有数据库。
1 | SHOW DATABASES; |
4.2 创建名称为stusys的学生信息数据库,该数据库是本书的重要数据库。
1 | CREATE DATABASE stusys; |
4.3 选择stusys为当前数据库。
1 | USE stusys; |
4.4 修改数据库stusys的默认字符集和校对规则。
1 | ALTER DATABASE stusys |
4.5 删除数据库stusys。
1 | DROP DATABASE stusys; |
4.6 在学生信息数据库stusys中创建student表。
1 | USE stusys; |
4.7 在stusys数据库中,使用复制方式创建student1表,表结构取自student表。
1 | USE stusys; |
4.8 查看数据库stusys中所有表名。
1 | USE stusys; |
4.9 查看数据库stusys中student表的基本结构。
1 | SHOW COLUMNS FROM student; |
4.10 查看数据库stusys中student表的详细结构。
1 | SHOW CREATE TABLE student\G |
4.11 在数据库stusys的student1表中增加一列sid,添加到表的第1列,不为空,取值唯一并自动增加。
1 | ALTER TABLE stusys.student1 |
4.12 将stusys数据库的student1表的列sbirthday修改为sage,将数据类型改为tinyint,可空,默认值为18。
1 | ALTER TABLE stusys.student1 |
4.13 删除数据库stusys的表student1中的列sid。
1 | ALTER TABLE stusys.student |
4.14 在stusys数据库中,将 student1表重命名为student2表。
1 | ALTER TABLE stusys.student1 |
4.15 在stusys数据库中,将 student2表重命名为student3表。
1 | RENAME TABLE stusys.student2 TO stusys.student3; |
4.16 删除stusys数据库中的student3表。
1 | DROP TABLE stusys.student3; |
4.17 查看存储引擎。
1 | SHOW ENGINES; |
第五章
5.1 向student1表插入一条记录(‘196001’,’董明霞’,’女’,’1999-05-02’,’通信’,50)。
1 | INSERT INTO student1 |
5.2 向student1表插入一条记录,学号为“196002”,姓名为“李茜”,专业为“通信”,总学分48,性别为“女”,出生日期为“1998-07-25”。
1 | INSERT INTO student1 (sno, sname, speciality, tc, ssex, sbirthday) |
5.3 向student1表插入一条记录,学号为“196004”,姓名为“周俊文”,性别为“男”、取默认值,出生日期为“1998-03-10”,专业为空值,总学分为52。
1 | INSERT INTO student1 (sno, sname, sbirthday, tc) |
5.4 向student表插入样本数据,共6条记录,参见附录B。
1 | INSERT INTO student |
5.5 对student1表,重新插入记录(‘196002’,’李茜’,’女’,’1998-07-25’,’通信’,48)。
1 | REPLACE INTO student1 VALUES |
5.6 向student2表插入student表的记录。
1 | INSERT INTO student2 |
5.7 在student1表中,将学生周俊文的出生日期改为“1999-03-10”。
1 | UPDATE student1 |
5.8 在student1表中,将所有学生的学分增加2分。
1 | UPDATE student1 |
5.9 在student1表中,删除学号为196004的行。
1 | DELETE FROM student1 |
5.10 在student1表中,删除所有行。
1 | DELETE FROM student1; |
5.11 在student表中,删除所有行。
1 | TRUNCATE student; |
第六章
6.1 查询student表中所有学生的学号、姓名和专业。
1 | SELECT sno, sname, speciality |
6.2 查询student表中所有列。
1 | SELECT * |
6.3 查询student表中所有学生的学生的sno、sname、speciality,并将结果中各列的标题分别修改为学号, 姓名, 专业。
1 | SELECT sno AS 学号, sname AS 姓名, speciality AS 专业 |
6.4 设student1表的表结构和样本数据与student表相同,且已创建和插入数据;在student1表中,列出学号、学分和增加4分后的学分。
1 | SELECT sno AS 学号, tc AS 学分, tc+4 AS 增加4分后的学分 |
6.5 查询student表中speciality列,消除结果中的重复行。
1 | SELECT DISTINCT speciality |
6.6 查询student表中专业为计算机或性别为女的学生。
1 | SELECT * |
6.7 查询score表成绩为92、95的记录。
1 | SELECT * |
6.8 查询student表中不在1998年出生的学生情况。
1 | SELECT * |
6.9 查询已选课但未参加考试的学生情况。
1 | SELECT * |
6.10 查询student表中姓董的学生情况。
1 | SELECT * |
6.11 查询含有“系统”或“数字”的所有课程名称。
1 | SELECT * |
6.12 求学生的总人数。
1 | SELECT COUNT(*) AS 总人数 |
6.13 查询通信专业学生的总人数。
1 | SELECT COUNT(*) AS 总人数 |
6.14 查询1201课程总分。
1 | SELECT SUM(grade) AS 课程1201总分 |
6.15 查询8001课程的最高分、最低分、平均成绩。
1 | SELECT MAX(grade) AS 课程8001最高分, MIN(grade) AS 课程8001最低分, AVG(grade) AS 课程8001平均成绩 |
6.16 查询各门课程的最高分、最低分、平均成绩。
1 | SELECT cno AS 课程号, MAX(grade) AS 最高分,MIN(grade) AS 最低分, AVG(grade) AS 平均成绩 |
6.17 查询平均成绩在90分以上的学生的学号和平均成绩。
1 | SELECT sno AS 学号, AVG(grade) AS 平均成绩 |
6.18 查询至少有5名学生选修且以8开头的课程号和平均分数。
1 | SELECT cno AS 课程号, AVG (grade) AS 平均分数 |
6.19 将计算机专业的学生按出生时间降序排序。
1 | SELECT * |
6.20 查询成绩表中成绩前3位学生的学号、课程号和成绩。
1 | SELECT sno, cno, grade |
6.21 采用交叉连接查询教师和和讲课地点所有可能组合。
1 | SELECT tname, location |
6.22 查询每个学生选修课程的情况。
1 | SELECT student.*, score.* |
6.23 查询选修了数据库系统课程且成绩在80分以上的学生情况。
1 | SELECT a.sno, sname, cname, grade |
6.24 对例6.22进行自然连接查询。
1 | SELECT * |
6.25 查询选修了“1201”课程的成绩高于学号为“191002”的成绩的学生姓名。
1 | SELECT a.cno, a.sno, a.grade |
6.26 采用左外连接查询教师任课情况。
1 | SELECT tname, cno |
6.27 采用右外连接查询教师任课情况。
1 | SELECT tno, cname |
6.28 查询选修了课程号为8001的课程的学生情况。
1 | SELECT * |
6.29 查询选修某课程的学生人数多于4人的教师姓名。
1 | SELECT tname AS 教师姓名 |
6.30 查询比所有通信专业学生年龄都小的学生。
1 | SELECT * |
6.31 查询选修1004课程的学生姓名。
1 | SELECT sname AS 姓名 |
6.32 查询性别为女及选修了课程号为4002的学生。
1 | SELECT sno, sname, ssex |
第七章
7.1 在stusys数据库中创建V_StudentScore视图,包括学号、姓名、性别、专业、课程号、成绩,且专业为计算机。
1 | CREATE OR REPLACE VIEW V_StudentScore |
7.2 在stusys数据库中创建V_StudentCourseScore视图,包括学号、姓名、性别、课程名、成绩,按学号升序排列,且专业为计算机。
1 | CREATE OR REPLACE VIEW V_StudentCourseScore |
7.3 分别查询V_StudentScore视图、V_StudentCourseScore视图。
1 | SELECT * |
7.4 查询计算机专业学生的学号、姓名、性别、课程名。
1 | SELECT sno, sname, ssex, cname |
7.5 在stusys数据库中,以student为基表,创建专业为通信的可更新视图V_StudentSpecialityComm。
1 | CREATE OR REPLACE VIEW V_StudentSpecialityComm |
7.6 向V_StudentSpecialityComm视图中插入一条记录:(‘196006’,’程超’,’男’,’1998-04-28’,’通信’, 50)。
1 | INSERT INTO V_StudentSpecialityComm |
7.7 将V_StudentSpecialityComm视图中学号为196006的学生的总学分增加2分。
1 | UPDATE V_StudentSpecialityComm SET tc=tc+2 |
7.8 删除V_StudentSpecialityComm视图中学号为196006的记录。
1 | DELETE FROM V_StudentSpecialityComm |
7.9 将例7.1定义的视图V_StudentScore视图进行修改,取消专业为计算机的要求。
1 | ALTER VIEW V_StudentScore |
7.10 修改例7.2创建的视图V_StudentCourseScore,学号以降序排列。
1 | ALTER VIEW V_StudentCourseScore |
7.11 在stusys数据库中,将视图V_StudentCourseScore删除。
1 | DROP VIEW V_StudentCourseScore; |
7.12 在stusys数据库中student表的sname列上,创建一个普通索引I_studentSname。
1 | CREATE INDEX I_studentSname ON student(sname); |
7.13 在stusys数据库中course表的cno列上,创建一个索引I_courseCno,要求按课程号cno字段值前2个字符降序排列。
1 | CREATE INDEX I_courseCno ON course(cno(2) DESC); |
7.14 在stusys数据库中student表的tc列(降序)和sname列(升序),创建一个组合索引I_studentTcSname。
1 | CREATE INDEX I_studentTcSname ON student(tc DESC, sname); |
7.15 在stusys数据库teacher表的tname列,创建一个唯一性索引I_teacherTname,并按降序排列。
1 | ALTER TABLE teacher |
7.16 在stusys数据库中,创建新表score1表,主键为sno和cno,同时在grade列上创建普通索引。
1 | CREATE TABLE score1 |
7.17 查看例7.16所创建的score1表的索引。
1 | SHOW INDEX FROM score1 \G; |
7.18 删除已建索引I_studentTcSname。
1 | DROP INDEX I_studentTcSname ON student; |
7.19 删除已建索引I_teacherTname。
1 | ALTER TABLE teacher |
第八章
8.1 在stusys数据库中创建course1表,以列级完整性约束方式定义主键。
1 | CREATE TABLE course1 |
8.2 在stusys数据库中创建course2表,以表级完整性约束方式定义主键。
1 | CREATE TABLE course2 |
8.3 在stusys数据库中创建course3表,以表级完整性约束方式定义主键,并指定主键约束名称。
1 | CREATE TABLE course3 |
8.4 删除例8.3创建的在course3表上的主键约束。
1 | ALTER TABLE course3 |
8.5 重新在course3表上定义主键约束。
1 | ALTER TABLE course3 |
8.6 在stusys数据库中创建course4表,以列级完整性约束方式定义唯一性约束。
1 | CREATE TABLE course4 |
8.7 在stusys数据库中创建course5表,以表级完整性约束方式定义唯一性约束。
1 | CREATE TABLE course5 |
8.8 删除例8.7在course5表创建的唯一性约束。
1 | ALTER TABLE course5 |
8.9 重新在course5表上定义唯一性约束。
1 | ALTER TABLE course5 |
8.10 创建score1表,在cno列以列级完整性约束方式定义外键。
1 | CREATE TABLE score1 |
8.11 创建score2表,在cno列以表级完整性约束方式定义外键,并定义相应的参照动作。
1 | CREATE TABLE score2 |
8.12 删除例8.11在score2表上定义的外键约束。
1 | ALTER TABLE score2 |
8.13 重新在score2表上定义外键约束。
1 | ALTER TABLE score2 |
8.14 在stusys数据库中创建表score3,在grade列以列级完整性约束方式定义检查约束。
1 | CREATE TABLE score3 |
8.15 在stusys数据库中创建表score4,在grade列以表级完整性约束方式定义检查约束。
1 | CREATE TABLE score4 |
8.16 删除例8.15在score4表上定义的检查约束。
1 | ALTER TABLE score4 |
8.17 重新在score4表上定义检查约束。
1 | ALTER TABLE score4 |
第九章
9.1 使用RAND()函数求3个随机值。
1 | SELECT RAND(), RAND(), RAND(); |
9.2 求3和4的平方根。
1 | SELECT SQRT(3), SQRT(4); |
9.3 求7.2和-7.2的绝对值。
1 | SELECT ABS(7.2), ABS(-7.2); |
9.4 求小于或等于-3.5或6.8的最大整数,大于或等于-3.5或6.8的最小整数。
1 | SELECT FLOOR(-3.5), FLOOR(6.8), CEILING(-3.5), CEILING(6.8); |
9.5 求8.546小数点后2位的值和四舍五入的整数值。
1 | SELECT TRUNCATE(8.546, 2), ROUND(8.546); |
9.6 求X的ASCII码值。
1 | SELECT ASCII('X'); |
9.7 将ASCII码值88、89、90组合成字符串。
1 | SELECT CHAR(88, 89, 90); |
9.8 求joyful左侧和右侧开始的3个字符。
1 | SELECT LEFT('joyful', 3), RIGHT('joyful', 3); |
9.9 查询字符串”计算机网络”的长度。
1 | SELECT LENGTH('计算机网络'); |
9.10 将”数据库原理与应用”中的”原理与应用”替换为”技术”。
1 | SELECT REPLACE('数据库原理与应用','原理与应用','技术'); |
9.11 返回字符串joyful的从第4个字符开始的3个字符。
1 | SELECT SUBSTRING('joyful',4, 3); |
9.12 获取当前日期。
1 | SELECT CURDATE(), CURRENT_DATE(); |
9.13 获取当前时间。
1 | SELECT CURTIME(), CURRENT_TIME(); |
9.14 获取当前日期和时间。
1 | SELECT NOW(); |
9.15 查询成绩表score,如果分数列的值大于或等于80分,则输出”良好”,否则输出”一般, 不及格或空值”。
1 | SELECT sno, cno, grade, IF(grade>=80, '良好', '一般, 不及格或空值') level FROM score; |
9.16 使用IFNULL()函数做条件判断。
1 | SELECT IFNULL(1/0, 'NULL'); |
9.17 获取当前数据库的版本号。
1 | SELECT VERSION(); |
第十章
10.1 修改MySQL的结束符为“//”。
1 | DELIMITER // |
10.2 创建一个不带参数的存储过程P_str,输出“Hello MySQL!”。
1 | DELIMITER $$ |
10.3 创建一个带参数的存储过程P_maxGrade,查询指定学号学生的最高分。
1 | DELIMITER $$ |
10.4 创建存储过程P_math,如果”高等数学”课程的平均成绩大于80分,则显示”高等数学成绩良好”,否则显示”高等数学成绩一般”。
1 | DELIMITER $$ |
10.5 创建存储过程P_title,将教师职称转变为职称类型。
1 | DELIMITER $$ |
10.6 创建存储过程P_integerSum,计算1~100的整数和。
1 | DELIMITER $$ |
10.7 创建存储过程P_oddSum,计算1~100的奇数和。
1 | DELIMITER $$ |
10.8 创建存储过程P_factorial,计算10的阶乘。
1 | DELIMITER $$ |
10.9 创建一个存储过程,计算student表中行的数目。
1 | DELIMITER $$ |
10.10 创建向学生表插入一条记录的过程P_insertStudent,并调用该过程。
1 | DELIMITER $$ |
10.11 创建修改学生专业和总学分的过程P_updateSpecGrade,并调用该过程。
1 | DELIMITER $$ |
10.12 创建删除学生记录的过程P_deleteStudent,并调用该过程。
1 | DELIMITER $$ |
10.13 删除存储过程P_insertStudent。
1 | DROP PROCEDURE P_insertStudent; |
10.14 创建一个存储函数F_courseName,由课程号查课程名。
1 | DELIMITER $$ |
10.15 调用存储函数F_courseName。
1 | SELECT F_courseName('1201'); |
10.16 删除存储函数F_courseName。
1 | DROP FUNCTION IF EXISTS F_courseName; |
第十一章
11.1 在stusys 数据库的score表创建触发器T_insertScoreRecord,当向score表插入一条记录时,显示“正在插入记录”。
1 | CREATE TRIGGER T_insertScoreRecord AFTER INSERT |
11.2 删除触发器T_insertScoreRecord。
1 | DROP TRIGGER T_insertScoreRecord; |
11.3 在stusys 数据库的student表创建触发器T_inserStudentRecord,当向student表插入一条记录时,显示插入记录的学生的姓名。
1 | CREATE TRIGGER T_inserStudentRecord AFTER INSERT |
11.4 在stusys数据库的course表创建一个触发器T_updateCourseScore,当更新表course中某门课程的课程号时,同时更新score表中所有相应的课程号。
1 | DELIMITER $$ |
11.5 在stusys 数据库的student表创建一个触发器T_deleteStudentScore,当删除表student中某个学生的记录时,同时将score表中与该学生有关的数据全部删除。
1 | DELIMITER $$ |
11.6 创建现在立即执行的事件E_direct,执行时创建一个表tb。
1 | CREATE EVENT E_direct |
11.7 创建事件E_insertTb,每2秒钟插入一条记录到表tb。
1 | CREATE EVENT E_insertTb |
11.8 创建事件E_startDays,从第2天起,每天清空表tb,在2021年12月31日结束。
1 | DELIMITER $$ |
11.9 将事件E_startDays更名为E_firstDays。
1 | ALTER EVENT E_startDays |
11.10 删除事件E_firstDays。
1 | DROP EVENT E_firstDays; |
第十二章
12.1 创建用户lee,口令为’1234’; 创建用户zhang,口令为’5678’;创建用户sun,口令为’test’。
1 | CREATE USER 'lee'@'localhost' IDENTIFIED BY '1234', |
12.2 删除用户zhang。
1 | DROP USER 'zhang'@'localhost'; |
12.3 将用户sun的名字修改为qian。
1 | RENAME USER 'sun'@'localhost' TO 'qian'@'localhost'; |
12.4 将用户qian的口令修改为’abc’。
1 | SET PASSWORD FOR 'qian'@'localhost'='abc'; |
12.5 授予用户lee在数据库stusys的student表上对学号列和姓名列的SELECT权限。
1 | GRANT SELECT(sno, sname) |
12.6 先创建新用户hong和liu,然后授予它们在数据库stusys的student表上的SELECT和INSERT权限。
1 | CREATE USER 'hong'@'localhost' IDENTIFIED BY '123', |
12.7 授予用户qian对数据库stusys执行所有数据库操作的权限。
1 | GRANT ALL |
12.8 授予已存在用户liang对所有数据库中所有表的CREATE和DROP的权限。
1 | GRANT CREATE, DROP |
12.9 授予已存在用户zhou对所有数据库中所有表的SELECT和UPDATE的权限。
1 | GRANT SELECT, UPDATE |
12.10 授予已存在用户ben创建新用户的权限。
1 | GRANT CREATE USER |
12.11 查询以上用户对所有数据库的权限。
1 | SELECT Host, User, Select_priv, Update_priv, Create_priv, Drop_priv, Create_user_priv |
12.12 授予已存在用户qiao在数据库stusys的student表上的SELECT和UPDATE权限,并允许将自身的权限授予其他用户。
1 | GRANT SELECT, UPDATE |
12.13 收回用户qiao在数据库stusys的student表上的UPDATE权限,
1 | REVOKE UPDATE |
12.14 查询以上用户对student表的权限。
1 | SELECT Host, Db, User, Table_name, Table_priv, Column_priv |
第十三章
13.1 备份stusys数据库中的course表中数据,要求字段值如果是字符就用双引号标注,字段值之间用逗号隔开,每行以问号为结束标志。
1 | SELECT * FROM course |
13.2 使用mysqldump备份stusys数据库的course表到D盘mysqlbak目录下。
1 | mysqldump -u root -p stusys course>D:\mysqlbak\course.sql |
13.3 备份stusys数据库到D盘mysqlbak目录下。
1 | mysqldump -u root -p stusys>D:\mysqlbak\stusys.sql |
13.4 备份MySQL服务器上的所有数据库到D盘mysqlbak目录下。
1 | mysqldump -u root -p --all-databases>D:\mysqlbak\alldata.sql |
13.5 删除stusys数据库中的course表中数据后,将例13.1备份文件course.txt导入到空表course中。
1 | DELETE FROM course; |
13.6 删除stusys数据库中各个表后,用例13.3备份文件stusys.sql将其恢复。
1 | mysql -u root -p stusys<D:\mysqlbak\stusys.sql |
第十四章
14.1 创建数据库test和表usr,在表中插入记录后,开始第1个事务,更新表的记录,提交第1个事务;开始第2个事务,更新表的记录,回滚第2个事务。
1 | (1)查看MySQL隔离级别(隔离级别下一节介绍) |




