Oracle(三)

一、概述

1. DML(data manipulation language 数据操作语言):insert update delete 

2. DDL(data definition language 数据定义语言): create table,alter table,drop table,truncate 

Oracle  中 修改字段名称  alter table student rename column sname to myname;
MySQL 中 修改字段名称  alter table student change name myname vachar(30);
Oracle中 添加一个列(字段)
ALTER TABLE 表名 add ( COLUMN 列名 数据类型(长度)); -- 注意 add() 这个括号不要忘了
Oracle 中 删除一个列
ALTER TABLE 表名 DROP COLUMN 列名;
Oracle 中 修改列名
alter table student rename column 旧列名 to 新列名;
Oracle中 修改表名

ALTER TABLE 旧表名 RENAME TO 新表名;

说明:注意加上COLUMN,为了强调修改的是表中的字段信息

注意:MySQL 中的DDL 和 Oracle 中的DDL语句有差异,注意加以区分

3.DCL(data control language 数据库控制语言) grant 授权 revoke 撤销授权

4.DQL(data query language 数据库查询语言) select

二、细节问题

(1)insert

需求1:我要给字段插入值,但是没想好,这个字段实际的值我可以先用占位符表示 ,等会我再给占位符赋值上实际的值。

知识点1:地址符 & (可以理解为一个占位符)

insert into emp(empno,ename,sal) values(&empno,&ename,&sal);

截图:

补充:结合"/"(执行上一个sql语句)可以再插入语句,对于插入多条数据比较方便。

需求2:查询语句中的字段你也可以使用占位符来占

 select ename,sal,&c from emp; 

需求3表名使用占位符来占

select * from &tablename;

需求4:一次插入多条数据

-- 我先创建一张表
create table myemp(ename varchar(32), sal int);
-- 一次性将emp中所有10号部门的员工的名字和工资,插入到myemp表中,也就是说我从一张表查出数据,然后插入另一张表中.
insert into myemp select ename,sal from emp where deptno=10;  --注意两张表的字段要对应上

注意:select ename,sal from emp where deptno=10;得出的是一条数据信息,等于是将查询的数据追加到原表中

截图显示

需求5:更新表 update 和MySQL中的一样  

语法:update 表名 set 字段名=值,字段名=值 where 条件

update emp set ename='zhangsan' where ename='SMITH';

面试题1:delete和truncate的区别?

 (1)delete逐条删除;truncate先摧毁表,再重建
 (2)最重要的区别是 delete是DML(DML语句,可以回滚,没有提交事务) truncate是DDL(不可以回滚)
 (3)delete 不会释放空间; truncate会
 (4)delete会 产生碎片 t;runcate不会 

 (5)delete 可以闪回(即便你删了,可以通过闪回来恢复); truncate 不可以(不走Oracle的回收站) 

注意:如果删除不加任何条件,就删除了整张表中的数据

碎片:指的是 delete 删除某些数据后,造成每一条和每一条数据之间不连贯,那么就会造成查询时效率比较低。

解决方法:所以我们可以用一条命令来整理某张表中的碎片  

 alter table emp move;

思考:闪回的原因?

解答:delete删除的数据,会在Oracle数据库的回收站暂存,所以可以闪回。

注意:在Oracle 中 “truncate emp”比 “select emp”慢 ,在MySQL中是相反的(效率的深层次问题)

--------------------------------------------

需求6:在每次插入的时候,屏幕上会有一些插入成功的提示语句,嫌烦人不想要

解决思路:提示可以关掉和打开

set feedback off --关掉提示语句
set feedback on  --打开提示语句

注意:客户端中不能用这种方法。

--------------------------------------------

需求7:执行文本文件中写好的sql语句

如:执行D盘下的mysql文件中的sql语句(文件的后缀名必须是.sql)

@d:\mysql.sql;-- @表示执行

---------------------------------------------

三、事务

3.1、事务特性:原子性、一致性、隔离性、持久性

回顾:MySQL种开启事务是 start transaction 通过这个命令开启事务

思考1:在Oracle中事务的开启是这样的?

解决:事务的开启标志,事务中第一条DML语句(准备操作数据,准备持久化) 

比如:你第一条语句是一个DML语句,那么事务就自动开启了,语句中有这几个关键字 insert、update、delete就是DML语句

思考2:在Oracle中事务是如何提交(结束)的

(1)显式提交;用 commit 来提交事务
(2)隐式提交事务; a.:正常退出exit;b:执行 DDL语句 、DCL语句,就会默认提交事务  
(3)显式回滚;rollback

(4)隐式回滚;非正常退出,停电了、死机

注意:DDL语句会提交事务的原因(从需求上,DDL是定义语句,一旦出现标志着创建新的东西,原来的数据就会通过缓存持久化)

补充:自动提交事务

若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。

SET AUTOCOMMIT ON;

3.2、回滚点

需求7:设置事务的回滚点,我可以回滚到上一个回滚点(理解--预先设定的中断位置)

练习

(1)先创建一张表(create 是一个DDL语句);

(2)插入数据(insert into 是一个DML语句);

(3)再插入一条数据;

(4)保存一个回滚点(savepoint a);

(5)继续再插入一条数据;

(6)回滚到上一个回滚点,观察最后这条数据是否插入进去?

create table testsavepoint (tid number,tname varchar(20)); --先创建一张表 create 是一个DDL语句 说明上一个事务已经提交了
insert into testsavepoint values(1,'Tom');                 --插入数据,是一个DML语句,说明这次的事务默认开启了
insert into testsavepoint values(2,'Mary');                --再插入一条数据
savepoint a;                                               --保存一个回滚点
 -- 到这里事务还没提交---
 -- 我继续再插入一条数据
insert into testsavepoint values(2,'hehe');                -- 比如我觉得hehe这个名字写错了,我不想要这条数据了,我就可以回滚到回滚点
rollback to savepoint a;                     --回滚到上一个回滚点 那么 hehe这条数据就没插入进去了 我们用了rollback此时事务也提交了

语法说明:

ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点

ROLLBACK:回滚命令使数据库状态回到 上次最后提交事务的状态

3.3 、Oracle 数据库的三个事务隔离级别  

read committed   读已提交 可以避免脏读的发生(Oracle的 默认隔离级别
serializable         串行化 可以避免所有的问题

read only                  只读(Oracle数据库特有的,其他数据库没有,思考其作用)

   思考:如何设置数据库的隔离级别

设置数据库的隔离级别 set transaction read only; -- 设置数据库的隔离级别

注意:一般不要修改事务的隔离级别

相关链接:

未完待续。。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值