目录
1、新开设一门课程,名叫网络安全与防火墙,学时40,编号为"0118",主要介绍网络的安全与主要的防火墙软件。
2、先建立monitor表,其结构与student表大致一样.包含student表的学号、姓名、性别和班级编号,然后把学生相应的个人资料插入到monitor表中。
5、学号为"980101005"的学生的"数据结构"课程成绩改为80分。
7、删除studentgrade表中学号以"99"开头的学生选修课程的记录。
8、删除课程名为"C语言导论"的课程信息和所有这门课的选课信息。
1.思考Alter与Update,Drop与Delete的区别
一、用SQL语句完成下列功能。
1、新开设一门课程,名叫网络安全与防火墙,学时40,编号为"0118",主要介绍网络的安全与主要的防火墙软件。
sql
insert into Course values
('0118','网络安全与防火墙','40','网络的安全与主要的防火墙软件');
2、先建立monitor表,其结构与student表大致一样.包含student表的学号、姓名、性别和班级编号,然后把学生相应的个人资料插入到monitor表中。
sql
-- 建表
create table Monitor(
Stu_id varchar(10) not null ,
Stu_name varchar(8) not null ,
Stu_sex varchar(2) not null default '男',
Class_id varchar(4) not null,
CONSTRAINT pk_monitor primary key clustered (Stu_id),
CONSTRAINT fk_class foreign key (Class_id) references Class(Class_id)
)
-- 插入数据
insert into Monitor
select s.Stu_id, s.Stu_name, s.Stu_Sex, s.Class_id
from Student s,
Class c
where s.Stu_id = c.Monitor;
3、更新所有职称为"助教"的教师职称为"助理教师"。
sql
update Teacher
set TechPost = '助理教师'
where TechPost = '助教';
4、在所有经济系班级的名称前加上"经济系"三个字。
sql
/*1. 直接更新无法完成,因为有触发器影响*/
/*以下语句查到了Class表存在触发器T_3*/
use school
go
exec sp_helptrigger "Class"
/*停用触发器*/
ALTER TABLE Class DISABLE TRIGGER T_3;
/*更新成功*/
update Class set Class_name = concat('经济系',Class_name)
where Depar_id = (select Depar_id from Deparment where Depar_name = '经济系');
/*2.用 SUBSTRING函数 去掉 Class_name 字段值的第一个字符,即索引从1开始*/
-- 从第二个字符开始截取长度为原始字符串长度减去1的子字符串。
update Class
set Class_name = substring(Class_name, 2, len(Class_name))
where Depar_id = (select Depar_id from Deparment where Depar_name = '经济系');
5、学号为"980101005"的学生的"数据结构"课程成绩改为80分。
sql
update StudentGrade
set Grade = 80
where Stu_id = '980101005'
and Course_id = (select Course_id
from Course
where Course_name = '数据结构');
6、删除studentgrade表中所有成绩不及格的记录。
sql
delete from StudentGrade
where Grade < 60;
7、删除studentgrade表中学号以"99"开头的学生选修课程的记录。
sql
delete from StudentGrade
where Stu_id like '99%';
8、删除课程名为"C语言导论"的课程信息和所有这门课的选课信息。
(尽量不用级联删除,因级联需在创建表时定义。)
sql
/*先删除选课记录,再删除课程教师表里对应的安排,最后删除课程*/
delete from StudentGrade where Course_id = (select Course_id from Course where Course_name = 'c语言');
delete from CourseTeacher where Course_id = (select Course_id from Course where Course_name = 'c语言');
delete from Course where Course_name = 'c语言';
二、小结
1.思考Alter与Update,Drop与Delete的区别
ALTER:用于修改数据库对象的结构或属性,例如修改表的列、添加索引或约束等。ALTER 语句通常用于更改数据库架构。
UPDATE:用于修改表中的数据,可以将表中的一些行或列的值更改为新的值。UPDATE 语句用于更新已有的数据。
DROP 和 DELETE 都可以用于删除数据或对象,但它们的作用范围不同。
DROP:通常用于删除数据库对象,例如表、视图、存储过程或函数等。
DELETE:用于删除表中的数据,可以删除表中的一些行或列。DELETE 语句用于删除已有的数据。
2.对数据进行插入、修改、删除时需要注意哪些问题?
数据完整性:确保插入、修改或删除的数据满足数据库表的约束和规则。例如,不违反主键、唯一性约束以及外键关系等。
数据备份和恢复:在进行重要的数据插入、修改和删除操作之前,应该先进行数据备份。这样可以在意外情况下恢复数据,避免数据丢失或损坏。
数据一致性维护:在进行数据修改和删除操作时,需要考虑与其他相关数据的一致性。例如,在删除某个表中的数据时,可能需要同时更新其他表中的相关数据,以确保数据的一致性。
错误处理和异常处理:在进行数据操作时,需要考虑可能出现的错误和异常情况,并进行适当的错误处理和异常处理。这包括处理数据冲突、数据重复、约束冲突等情况,以及记录错误日志或向用户提供适当的错误提示。
性能优化:对于大规模的数据插入、修改和删除操作,需要考虑性能优化的问题。可以通过批量操作、合理使用索引、优化查询语句等方式来提高操作的效率和响应速度。