SQL数据更新
SQL数据更新包括数据插入、修改和删除三种操作。
数据插入 insert
insert语句的基本语法结构:
insert into 表(列1,列2,...,列n) values(值1,值2,...,值n)
说明:
1、insert语句中列的顺序可以和表中列的顺序不一致。
2、values子句中的值一定要对应将要赋值的列。
3、允许为空的列可以不插入值,否则必须插入值。
4、种子增量列的值由数据库自动生成,无需插入。
5、日期和字符串类型的数据要加单引号包围。
insert语句的变化:
如果列的顺序和表中列的顺序是一致的,那么insert into子句中的列是可以省略的,比如:
insert into 表 values(值1,值2,...,值n)
提示:但更推荐第一种书写方式,因为当表中列发生变化的时候,比如插入新列,或列的顺序交换等,第一种书写方式能够完全兼容这些变化,而第二种书写方式则会发生异常。
【例1】在Student表中新增一位学生的信息:(980012,张倩,女,20,计科系)。
insert into Student(Sno,Sname,Ssex,Sage,Sdept) values(980012,'张倩','女',20,'计科系')
如果列的顺序与表中一致,上述SQL语句可简化为:
insert into Student values(980012,'张倩','女',20,'计科系')
插入子查询的结果(批量插入):当插入的数据来自于数据库中的另外一张表,或几张表时,可以通过子查询来批量插入数据。
insert into 表(列1,列2,...,列n)
select子查询
【例2】新建表Student_temp,现要求将Student表中所有计科系的学生数据插入到Student_temp中。
insert into Student_temp
select * from Student where Sdept='计科系'
提示:最后需要说明的是一条insert语句只能向一张表中插入数据;如果插入的数据涉及多张表,则只能书写多条insert语句来实现。
数据修改 update
update语句的基本语法结构:
update <表名>
set <列名1>=<表达式1> [,<列名2>=<表达式2> …]
[where <条件>]
说明:
1、如果有where子句,则仅对符合查询条件的记录进行修改;否则对表中全部数据进行修改。
2、一条update语句只能对一张表中的数据进行修改;如果修改的数据涉及多张表,则对每张表均需使用单独的update语句进行修改。
3、如果修改的数据在一张表中,但查询条件字段涉及另一张或几张表,则可以使用子查询来配合筛选目标数据。
【例1】将每个学生的年龄增加1岁。
update Student set Sage=Sage+1
【例2】将张三的年龄改为20岁,系别改为’art’。
update Student set Sage=20,Sdept=‘art’where Sname=‘张三’
【例3】将张斌的成绩改为86分。
update SC set Grade=86
where Sno = (
select Sno from Student where Sname=‘张斌’)
数据删除 delete
delete语句的基本语法结构:
delete from <表名> [ where <条件> ]
说明:
1、如果有where子句,则仅删除符合查询条件的记录;否则删除表中的所有数据,作用相当于清空表中数据,但不会删除表。
2、一条delete语句仅能对一张表中的数据进行删除;如果要删除的数据分布在多张表中,则只能通过多条delete语句来分别逐表删除。
3、和修改语句相同,如果删除的数据在一张表中,但查询条件字段涉及另一张或几张表,则可以使用子查询来配合筛选目标数据。
【例1】删除成绩在50以下的所有选课记录。
delete from SC where grade<50
【例2】删除“数据库”课程成绩在60至70分之间的所有选课记录。
delete from SC
where (Grade between 60 and 70) and Cno=(
select Cno from Course where Cname=‘数据库’
)
提示:在有参照关系的表中,delete语句无法删除被参照的数据。如果要删除这些数据,而根据实际情况在以下三种方法中选择一种:
1、解除参照关系;
2、先删除参照数据,再删除被参照数据;
3、使用级联删除。(删除被参照数据时,数据库自动删除参照数据。)

