sql insert 语句提示成功后 数据并没有插入表中_[基础篇]-数据库-04-数据库的基本操作3-数据处理...
数据库的基本操作3-数据处理处理数据(DML)数据控制语言(DML)DML(Data mainipultation language)数据操纵语言 事务的完成是由若干个DML语句组成的把sql的操作分为四大类DML(Data mainipultation language) 数据操纵语言:insertupdatedeleteselect DDL(Data Defintied Langu...
数据库的基本操作3-数据处理
处理数据(DML)
数据控制语言(DML)
DML(Data mainipultation language)数据操纵语言
事务的完成是由若干个DML语句组成的
把sql的操作分为四大类
- DML(Data mainipultation language) 数据操纵语言:insert update delete select
- DDL(Data Defintied Language) 数据定义语言:create alter drop
- TCL(Transaction Controll Language) 事务控制语言:commit savepoint rollback
- DCL(Data Controll Language) 数据控制语言:grant revoke
2.插入数据
INSERT 语句语法
- 使用 INSERT 语句向表中插入数据
- 使用这种语法一次只能向表中插入一条数据
插入数据
插入数据的三种方式:
a.省略列名
insert into 表名 values(value1,value2);
b.插入指定的列(列名与value要一一对应)
insert into 表名(列名1,列名2,...... ) values(value1,value2,...... );
c.通过创建脚本进行创建
insert into 表名 values(&提示1,&提示2,...... );
insert into 表名(列名1,列名2,....)values(&提示1,&提示2,...... );
通过&实现,需要注意的是如果插入的是字符或字符串则需要加上‘单引号’进行标识
案例分析
创建表格
--插入数据案例分析
--创建表格
/*
创建student表
sid 学生id --primary key
sname 学生姓名
sage 学生年龄
grade 学生成绩
*/
create table student(
sid number(10) primary key,
sname varchar2(20),
sage number(3),
grade number(3)
);
select * from student;
--插入数据测试
/*
插入数据有三种方式
a.省略列名插入数据
insert into 表名 values(value1,value2,.......);
b.插入指定的列
insert into 表名(列名1,列名2,.......)values(value1,value2,.......);
c.通过创建脚本方式插入数据
insert into 表名 values(&提示1,&提示2,.......);
insert into 表名(列名1,列名2,.......)values(&提示1,&提示2,.......);
*/
数据测试
--a.省略列名:必须使得插入数据的顺序与定义的顺序一一对应
insert into student values(1001,'张三',18,90);
--在满足约束的条件下,可以插入空值(用空值填充数据)
--显示插入空值:在values子句中插入指定的空值
insert into student values(1002,'李四',null,null);
--隐式插入空值:在插入的时候省略相应列的值
insert into student(sid,sname) values(1003,'王五');
--b.插入指定的列
insert into student(sid,sname,grade) values(1004,'王五',95);
--c.通过创建脚本进行创建
insert into student values(&学生编号,&学生姓名,&学生年龄,&学生成绩);
insert into student(sid,sname) values(&学生编号,&学生姓名);
--亦可插入指定的数据
insert into student(sid,sname) values(1007,sysdate);
--查询插入的所有数据
select * from student;
3.更新数据
基本语法
案例分析
--更新数据
--普通更新数据
--1.将student表中sid为1007的学生姓名修改为小七,并设置相应的成绩
update student
set sname='小七',grade=95
where sid=1007;
select * from student;
--使用子查询更新语句
--2.将student表中sid为空的学生成绩设置为与sid为1005的学生成绩相同
update student
set grade=(select grade
from student
where sid=1005)
where grade is null;
select * from student;
4.删除数据
基本语法
案例分析
--删除数据
--a.普通删除指定数据
--删除一条指定数据
--1.删除student表中sid为1007的数据
delete
from student
where sid = 1007;
select * from student;
--删除多组数据
--2.删除student表中sid小于1005的所有数据
delete
from student
where sid < 1005;
select * from student;
--b.通过子查询删除指定数据
--3.删除student表中成绩与sid为1005的学生相同的学生信息
delete
from student
where grade = (select grade
from student
where sid = 1005);
select * from student;
Delete和Truncate
delete和truncate都是删除表中的数据
delete操纵可以rollback(回滚),但delete 操纵可能会产生碎片,并且不会释放空间
truncate 清空表
--delete与truncate
insert into student values(1001,'张三',18,92);
select * from student;
--delete删除表中数据,可以回滚
delete from student;
点击数据回滚,恢复删除之前的内容
select * from student;
Truncate语句执行之后自动提交,此时可以看到相应的回滚按钮并没有亮起来,数据也被清空
5.数据库事务(重要)
事务基础
事物的特性
数据库事务有四大特性: ACID --> 原子性 一致性 隔离性 持久性
- 原子性(Atomicity)
指事务在逻辑上是不可分割的操作单元,所有的语句要么都执行成功,要么都执行失败并进行撤销。
- 一致性(Consistency)
从一个状态转换为另外一个状态
事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束
- 隔离性(Isolation)
隔离性是针对并发而言。所谓的并发是指数据库服务器同时执行多个事务,如果在执行的过程中不采取有效的专门控制机制,并发事务之间会发生相互干扰
隔离性就是隔离并发运行的多个事务避免产生相互影响
- 持久性(Durability)
事务一旦提交对数据的修改就是持久性的,数据已经从内存转移到了外部服务器上,并执行了固化的步骤
数据库事务的组成:
- 一个或者多个DML语句
- 一个DDL(数据定义语言)
- 一个DCL 数据控制语言
使用commit 和rollback 进行事务的提交和事务的回滚
控制事务
--创建表格
create table student(
sid number(10) primary key,
sname varchar2(20)
);
--数据测试
insert into student values(1,'张三');
insert into student values(2,'李四');
--设置保存点p1
savepoint p1;
select * from student;
--再次插入数据、修改数据
insert into student values(3,'王五');
update student set sname='hahabibu' where sid=2;
--设置保存点p2
savepoint p2;
select * from student;
--测试删除数据
delete from student where sid=3;
select * from student;
--如果出现异常可以回滚到设置的保存点
--a.回滚到记录点p2
rollback to p2;
select * from student;
--b.回滚到记录点p1
rollback to p1;
select * from student;
--提交事务
commit;
数据库的事务隔离级别
面试题: 数据库事务相关的内容
- 问题一: 什么是事务?
- 问题二:事务的四大特性是什么?详细解释:ACID
- 问题三: 在数据库中由并发导致的各种问题包含哪些?
- 问题四: 为了解决以上问题设计了哪些隔离级别详细解释?
1.什么是事务?
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。事务的完成由若干个DML语句组成的。
2.事务的四大特性?ACID
数据库事务有四大特性: ACID --> 原子性 一致性 隔离性 持久性
- 原子性(Atomicity)
指事务在逻辑上是不可分割的操作单元,所有的语句要么都执行成功,要么都执行失败并进行撤销。
- 一致性(Consistency)
从一个状态转换为另外一个状态
事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束
- 隔离性(Isolation)
隔离性是针对并发而言。所谓的并发是指数据库服务器同时执行多个事务,如果在执行的过程中不采取有效的专门控制机制,并发事务之间会发生相互干扰
隔离性就是隔离并发运行的多个事务避免产生相互影响
- 持久性(Durability)
事务一旦提交对数据的修改就是持久性的,数据已经从内存转移到了外部服务器上,并执行了固化的步骤
3.在数据库中由并发导致的各种问题包含哪些?
由于数据库的隔离性导致的并发问题包括以下内容
对于同时运行的多个事务,当这些事务访问数据库中相同的数据,如果没有采取必要的隔离机制将会导致各种并发问题。
- 脏读
对于两个事务T1,T2 。 T1读取了已经被T2更新但是还没有提交的字段之后,如果T2发生了回滚,T1读取的内容就是无效的。
- 不可重复读
对于两个事务T1,T2。T1读了一个字段,然后T2更新了该字段之后,T1再次读取同一个字段,两次读取的值就是不同的。
- 幻读(虚度)
对于两个事务T1,T2 T1从一个表中读取一个字段,然后T2在该表中插入一个新的行之后,如果T1再次读取这个表发现数据行数变多。
- 丢失更新
是第一次提取的内容被第二次提交的内容进行了覆盖。
4.为了解决以上问题设计了哪些隔离级别详细解释?
为了解决并发问题 数据库定义了四种隔离级别。隔离级别越高效率越慢,根据业务选择一个合适的隔离级别,在性能和安全上做平衡。
- read_uncommitted:读未提交的数据
允许事务读取未被其他事务提交的变更,脏读,不可重复读,(虚读)幻读问题都会出现
- read_commited :读已提交的数据
只允许事务读取已经被其他事务提交的变更,可以避免脏读,但是不可重复读和幻读依然存在
- Repeatableread:可重复读
确保事务可以多次从一个字段中读取相同的值,这个事务存在期间,禁止其他事务对这个字段进行更新,可以避免脏读,不可重复读但是幻读依然存在。
- Serializable :串行化
确保可以从一个表中读取相同的行,这个事务存在期间禁止其他事务对该表进行插入、更新和删除操作。所有的并发问题都可以避免,但是性能十分低下。
- 丢失更新:主要是使用乐观锁和悲观锁解决丢失更新。
并不是所有的数据库都支持这四种隔离级别
- Oracle支持两种隔离级别 read_commited 、Serializable 默认的隔离级别是read_commited
- Mysql支持四种隔离级别 mysql的默认隔离级别是repeatableread
完整SQL参考:
--插入数据案例分析
--创建表格
/*
创建student表
sid 学生id --primary key
sname 学生姓名
sage 学生年龄
grade 学生成绩
*/
create table student(
sid number(10) primary key,
sname varchar2(20),
sage number(3),
grade number(3)
);
select * from student;
--插入数据测试
/*
插入数据有三种方式
a.省略列名插入数据
insert into 表名 values(value1,value2,.......);
b.插入指定的列
insert into 表名(列名1,列名2,.......)values(value1,value2,.......);
c.通过创建脚本方式插入数据
insert into 表名 values(&提示1,&提示2,.......);
insert into 表名(列名1,列名2,.......)values(&提示1,&提示2,.......);
*/
--a.省略列名
insert into student values(1001,'张三',18,90);
--在满足约束的条件下,可以插入空值
--显示插入空值:在values子句中插入指定的空值
insert into student values(1002,'李四',null,null);
--隐式插入空值:在插入的时候省略相应列的值
insert into student(sid,sname) values(1003,'王五');
--b.插入指定的列
insert into student(sid,sname,grade) values(1004,'王五',95);
--c.通过创建脚本进行创建
insert into student values(&学生编号,&学生姓名,&学生年龄,&学生成绩);
insert into student(sid,sname) values(&学生编号,&学生姓名);
--亦可插入指定的数据
insert into student(sid,sname) values(1007,sysdate);
--查询插入的所有数据
select * from student;
--------------------------------------
--更新数据
--普通更新数据
--1.将student表中sid为1007的学生姓名修改为小七,并设置相应的成绩
update student
set sname='小七',grade=95
where sid=1007;
select * from student;
--使用子查询更新语句
--2.将student表中sid为空的学生成绩设置为与sid为1005的学生成绩相同
update student
set grade=(select grade
from student
where sid=1005)
where grade is null;
select * from student;
-------------------------------------
--删除数据
--a.普通删除指定数据
--删除一条指定数据
--1.删除student表中sid为1007的数据
delete
from student
where sid = 1007;
select * from student;
--删除多组数据
--2.删除student表中sid小于1005的所有数据
delete
from student
where sid < 1005;
select * from student;
--b.通过子查询删除指定数据
--3.删除student表中成绩与sid为1005的学生相同的学生信息
delete
from student
where grade = (select grade
from student
where sid = 1005);
select * from student;
--delete与truncate
insert into student values(1001,'张三',18,92);
select * from student;
--delete删除表中数据,可以回滚
delete from student;
select * from student;
--truncate删除表中数据,直接提交
truncate table student;
select * from student;
drop table student;
--------------------------------------------------------
--数据库事务
--案例分析
--创建表格
create table student(
sid number(10) primary key,
sname varchar2(20)
);
--数据测试
insert into student values(1,'张三');
insert into student values(2,'李四');
--设置保存点p1
savepoint p1;
select * from student;
--再次插入数据、修改数据
insert into student values(3,'王五');
update student set sname='hahabibu' where sid=2;
--设置保存点p2
savepoint p2;
select * from student;
--测试删除数据
delete from student where sid=3;
select * from student;
--如果出现异常可以回滚到设置的保存点
--a.回滚到记录点p2
rollback to p2;
select * from student;
--b.回滚到记录点p1
rollback to p1;
select * from student;
--提交事务
commit;
更多推荐




所有评论(0)