一、DML(数据操作语言)
1、insert
作用:往表中插入数据
1、元组值的插入
语法:insert into tablename(column1,column2,...,columnN) values(value1,value2,...,valueN);
例:insert into emp(empno,ename,sal,deptno) values(9527,'huaan',100,40);
注:如果往表中所有的列都添加数据时,表后面的字段可以不添加,直接写values
例:insert into emp values(8888,'xiaoqiang','aaa',9527,sysdate,0,null,40);
2、查询结果式的插入
语法:insert into tablename sub-query
例:insert into emp (select * from emp where deptno = 20)
2、delete
作用:从表中删除数据
语法:delete [from] tablename [where condition]([]中的可以不写)
例:delete em where empno = 8888;(按条件删除表中的数据)
delete from emp;(删除表中所有的数据)
3、update
作用:更新表中的数据
语法:update tablename set column1=value1,column2=value2,...,columnN=valueN [where condition]([]中的可以不写)
例:update emp set sal = sal*1.2 where ename = 'SMITH';
二、事务
1、事务的基本概念
概念:事务(Transaction)是一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位。
目的:保证数据库的完整性
特点:事务不能嵌套
如何开启事务:
一个DML语句(insert、delete、update)的执行
如何关闭事务:
1.显示的调用commit或rollback
2.当执行DDL(Create、Alter、Drop)语句事务自动提交
3.用户正常断开连接时,事务自动提交。
4.系统崩溃或断电时事务自动回滚(即撤销操作)
例:
update emp_temp set sal = sal - 500 where ename='JONES';
update emp_temp set sal = sal + 500 where ename='SMITH';
commit;
rollback;
Commit表示事务成功地结束,此时告诉系统,数据库要进入一个新的正确状态,该事务对数据库的所有更新都以交付实施。每个Commit语句都可以看成是一个事务成功的结束,同时也是另一个事务的开始。
Rollback表示事务丌成功的结束,此时告诉系统,已发生错误,数据库可能处在丌正确的状态,该事务对数据库的更新必须被撤销,数据库应恢复该事务到初始状态。每个Rollback语句同时也是另一个事务的开始。
一旦执行了commit语句,将目前对数据库的操作提交给数据库(实际写入DB),以后就丌能用rollback进行撤销。
执行一个 DDL ,dcl语句或从 SQL*Plus正常退出,都会自动执行commit命令。
2、savepoint (存档点)
作用:存档点(savepoint)是事务过程中的一个逻辑点,用于取消部分事务,当结束事务时,会自动的删除该事务中所定义的所有保存点。当执行rollback时,通过指定保存点可以回退到指定的点。
例:
insert into emp_temp(empno,ename) values(1111,'cai10');
insert into emp_temp(empno,ename) values(2222,'cai20');
savepoint sp1;
insert into emp_temp(empno,ename) values(3333,'cai30');
insert into emp_temp(empno,ename) values(4444,'cai40');
rollback to sp1;
3、事务四大特征(ACID):原子性,一致性,隔离性和持久性。
原子性(Atomicity)
一个原子事务要么完整执行,要么干脆丌执行。这意味着,工作单元中的每项任务都必须正确执行。如果有任一任务执行失败,则整个工作单元或事务就会被终止。即此前对数据所作的任何修改都将被撤销。如果所有任务都被成功执行,事务就会被提交,即对数据所作的修改将会是永久性的。
一致性(Consistency)
一致性代表了底层数据存储的完整性。它必须由事务系统和应用开发人员共同来保证。事务系统通过保证事务的原子性,隔离性和持久性来满足这一要求; 应用开发人员则需要保证数据库有适当的约束(主键,引用完整性等),并且工作单元中所实现的业务逻辑丌会导致数据的丌一致(即,数据预期所表达的现实业务情况丌相一致)。例如,在一次转账过程中,从某一账户中扣除的金额必须不另一账户中存入的金额相等。支付宝账号100 你读到余额要取,有人向你转100 但是事物没提交(这时候你读到的余额应该是100,而丌是200) 这种就是一致性
隔离性(Isolation)
• 隔离性意味着事务必须在丌干扰其他进程或事务的前提下独立执行。换言之,在事务或工作单元执行完成前,其所访问的数据不能受系统其他部分的影响。
持久性(Durability)
持久性表示在某个事务的执行过程中,对数据所作的所有改动都必须在事务成功结束前保存至某种物理存储设备。这样可以保证,所作的修改在任何系统瘫痪时不至于丢失。
4、数据的状态:
提交或回滚前数据的状态
以前的数据可恢复
当前的用户可以看到DML操作的结果
其他用户丌能看到DML操作的结果
被操作的数据被锁住,其他用户不能修改这些数据
回滚后数据的状态
语句将放弃所有的数据修改
修改的数据被回退.
恢复数据以前的状态.
行级锁被释放.
三、视图
定义:视图(view):一种不占用物理空间的虚表。
作用:将一些查询复杂的SQL语句变为视图,便于查询
语法:
create [or replace] view v$_name as sub-query [with read only]
实例:
create view v$_emp_dept as select ename,sal,job,dname from emp,dept where emp.deptno = dept.deptno;
需要注意的点:
视图也可以从视图中产生
实例:create view v$_emp_dept_tem as select ename,sal from v$_emp_dept
我们把用于产生视图的表称之为基表
我们对视图进行数据修改就是对基表进行数据修改,反之亦然
不能对多张表的数据,通过视图进行修改。
使用视图需要注意
视图可以当成普通的表进行操作(增删改查等操作)
一般来讲,只有重复出现非常多次的SQL语句,才会创建视图
数据库迁移,视图也得随之迁移,否则在新数据中是不能用的
创建视图时,尽量不要带or replace
视图的优缺点
--视图的优点:可以使某些重复出现SQL语句变得更为简单
--视图的缺点:1.如果修改基表的结构,视图失效
2.增加数据库的维护成本
3.视图会被覆盖掉
4.一般情况下,不要对视图进行DML操作
网友评论