插入数据
insert into
语句
-- 最好指定出字段名,增加代码可读性,并防止出错。
--插入一条记录
insert into tb_student(studentNo, sex, birthday)
values('2013110102', '男', '1996-11-30');
--插入多条记录
inert into tb_student(studentNo, sex, birthday)
values('2013110102', '男', '1996-11-30'),
('2013110103', '女', '1990-1-20'),
('2013110102', '男', '1995-12-25');
--插入查询结果
insert into tb_student_copy(studentNo, studentName)
select studentNo, studentName from tb_student;
replace into
语句
replace into tb_student(studentNo, sex, birthday)
values('2013110102', '男', '1996-11-30');
-- replace 语句可以再插入数据之前,将表中与待插入的新纪录相冲突的旧记录删除,从而保证新纪录能正常插入
insert
与replace
的区别:
1、两者用法相同,区别在于如何处理重复记录。
2、如果一个表中建立了主键索引或唯一索引,当我们向表中使用已经存在的键值插入一条记录,insert会报错,replace会在插入数据之前,将表中与待插入的新纪录相冲突的旧记录删除,从而保证新纪录能够正常插入。
3、如果表中定义了外键,使用replace语句仍然会报错,此时应该先更新外键所依赖的表中的记录,再回头更新表中的记录。
修改数据记录
update
语句
-- 修改特定记录
update tb_student
set studentName='黄涛'
where studentNo='201410210';
-- 不指定 where 条件,则更新所有数据
update tb_student
set score=score*1.05;
-- 带子查询的修改,where子句也可以嵌套子查询
update tb_student
set score=0
where courseNo=(select courseNo from tb_course where courseName='程序设计');
删除数据记录
delete from
语句
--删除特定记录
delete from tb_student
where studentName='王五';
-- where子句同样可以是嵌套查询
-- 如果不指定 where子句,将删除所有记录
truncate
语句
truncate tb_student; -- 删除表中所有记录
delete
与truncate
的区别:
1、delete语句每次从表中删除一行,并同时将该行删除操作作为事务保存在日志中,以便回滚操作;truncate则一次性删除所有数据,并且不记录在日志中,所以不可恢复。
2、 delete操作不会减少表或索引所占的空间;truncate操作表和索引所占的空间会恢复到初始大小。
3、应用范围:truncate只能针对table(表),delete可以是table(表)或view(视图)。
课后习题
1、使用insert语句向各表中插入如下记录
inert into S(SNO, SNAME, STATUS, CITY) values
('S1', 'Smith', 20, 'London'),
('S2', 'Jones', 10, 'Paris'),
...
('S5', 'Adams', 30, 'Athens');
--注意这里的 S6,status字段为空值,所以单独插入该行记录
insert into S values('S6', 'Brown', 'New York');
-- P 表和 SP 表的插入操作与 S 表相同,此处省略。
2、将表P中蓝色零件的重量增加20%
update P set WEIGHT=WEIGHT*1.2
where COLOR='Blue';
3、将表S中状态为空值的供应商信息删除
delete from S
where status is null;
4、删除没有供应商零件的供应商信息
--书中的 SPJ 应该是个错误,且个人觉得应该选取不重复的SNO,不过不影响结果
delete from S where SNO not in
(select distinct SNO from SP);