增删改语句的介绍:
一、单个数据插入语句
INSERT INTO 表名 [(属性列 1,属性列 2 … )] VALUES (常量 1 ,常量 2 … )
说明:
①插入一个新元组,新元组属性列 1 的值为常量 1,属性列 2 的值为常量 2…
INTO 子句中没有出现的属性列, 新元组在这些属性列上将置空值。但必须注意的是,在表定义时说明了 NOT NULL 的属性列不能置空值,否则会出错。
出错原因:主码具有唯一性和不可重复性,当主码为空时,唯一性约束被破坏所以主码列不能重复和为空值。如果该列不是主码,则说明设置了unique属性。
unique约束:
1.UNIQUE 约束唯一标识数据库表中的每条记录。(可以理解为增加UNIQUE约束的列为只有该表中才有的属性)
2.UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
3.PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
参考网址:/sql/sql-unique.html
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
②如果 INTO 子句中没有指明任何属性列名,则新插入的记录必须在每个属性列上均有值,而且常量的顺序与属性列的顺序相对应;
③如果基本表后面有属性列,属性列的排列顺序不一定要和表定义时顺序一致, 但VALUES 后的常量值对应于属性列名中的分量的值,个数相等。
二、成批数据插入语句
INSERT INTO 表名 [(属性列 1,属性列 2 … )] 子查询
上述命令的功能是一次将子查询的结果全部插入指定表中。
三、删除数据语句
DELETE FROM 表名 WHERE 删除限定条件
功能:从指定表中删除满足 WHERE 子句条件的所有记录。该语句中没有 WHERE 子句时,表示删除此表中的全部记录,但此表的结构不会被删除,此表的定义仍在数据字典中。
需要说明的是:
①数据删除只能对整个元组或一条记录操作,不能只删除某些属性上的值;
②数据删除只能对一个表起作用,若要从多个表中删除元组,则必须对每个表分别执行删除命令。
四、更新数据语句
UPDATE 表名 SET 属性列 1=常量 1,属性列 2=常量 2... WHERE 更新限定条件
功能:修改基本表中满足条件表达式的那些元组的属性值,用 SET 子句中的值表达式修改原来的属性值。。如果省略 WHERE 子句,则表示要修改表中的所有元组。
代码实现:
1.在 SQL Server Management Studio 中向数据库 XSGL 的 student 表加入如表所示的数据(这里为了方便我重新建立了数据库XSGL2 )
student 表记录
2.建立一个新表‘成教表’ chengjiao, 结构与 student 表相同。
T-SQL语句: CREATE TABLE chengjiao ( SNO char (8) not null unique, SNAME char(10), SEX char(2), DNO char(8), AGE smallint, BIRTHDAY datetime )
3.将一个新学生(学号:‘ 7027’,姓名:‘ 张三’,年龄:20,所在系编号:‘ 0002’ )插入到学生表中。
T-SQL语句: INSERT INTO student(SNO,SNAME,AGE,DNO) VALUES (‘7027’,‘张三’,20,‘0002’)
结果如图:
4.按如下语句插入另外两个同学的信息到成教表中
T-SQL语句: INSERT INTO chengjiao(SNO,SNAME,AGE,DNO) VALUES (‘7011’,‘王二’,23,‘0003’) INSERT INTO chengjiao(SNO,SNAME,AGE,DNO) VALUES (‘7021’,‘张三’,19,‘0003’)
说明:插入的数据必须符合数据库的完整性约束
结果如图:
5.将成教表 chengjiao 中的所有学生一次性添加到学生表 student 中。
T-SQL语句: INSERT INTO student (SNO,SNAME,SEX,DNO) (SELECT SNO,SNAME,SEX,DNO FROM chengjiao)
结果如图:
6.依据学生的生日, 计算出该学生的年龄
T-SQL语句: UPDATE student SET AGE=(YEAR(GETDATE())-YEAR(BIRTHDAY))
未计算之前从上图可以看出李一和李二的生日并未显示
运行后结果如图:
7.将所有安排在 B101 的课程调整到 A302(这里以及下面的T-SQL语句的实现,我用到了老师提供的数据库包括课程表,选课表等等)
T-SQL语句: UPDATE course SET ROOM=‘A302’ WHERE ROOM='B101’
前后对比如下图:
8.将选课表中的‘概率论与数理统计’课程的成绩减去 4 分
T-SQL语句: UPDATE sc SET GRADE=GRADE-4 WHERE CNO IN (SELECT CNO FROM course WHERE CNAME=‘概率论于数理统计’)
组课程表这里我们可以看到:概率论与数理统计的课程号CNO为000401
然后在sc表即选课表中发现其中一个学生的概率论与数理统计的成绩如下图:
运行上述T-SQL语句后,结果如下图:
9.从排课表中删除‘ 张聪’ 老师的所有排课纪录
T-SQL语句: DELETE FROM course WHERE TNAME='张聪’
这里我直接执行该语句发现有错误:
DELETE 语句与 REFERENCE 约束"FK__sc__CNO__24927208"冲突
仔细看sc选课表跟course课程表发现两表都有课程名CNO这一项,即有外键对两表进行约束,不能直接删除相关内容,所以我们要解除外键的约束(参考CSDN文章:SQL主键和外键约束)
在查询中执行下面语句:
alter table sc drop CONSTRAINT FK__sc__CNO__24927208
这时我们再运行删除相关语句,前后结果对比如下:
删掉了🙊🙊👏🏾👏🏾👏🏾👏🏾
10. 删除学院编号为空的学生记录及选课记录(这个语句由于表中数据太多 不好举例子 所以就跳过)
T-SQL语句: DELETE FROM sc WHERE SNO IN (SELECT SNO FROM student WHERE DNO is NULL) DELETE FROM student WHERE DNO is NULL
说明:为了满足数据的完整性约束要求,必须先在选课表中删除该生的选课纪录,再在学生表中删除该名学生
11. 删除表 ’ excelxuanke’
T-SQL语句: DROP table excelxuanke
这里我直接建了一个表excelxuanke来举例
运行语句前后:
也是删掉了👏🏻👏🏻👏🏻👏🏻