一、概述

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; -- 设置数据库的隔离级别
注意:一般不要修改事务的隔离级别

相关链接:

未完待续。。。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信