Oracle-第三章-DML数据库操作语言

 三、DML数据库操作语言

注意:多台电脑一起操作要及时提交或回滚
     不能挂起
     否则其他人无法操作
     在PL/SQL Developer界面上面有绿色(提交)和红色(回滚)的类箭头符号
有人未提交或回滚导致无法操作的处理:
     在PL/SQL Developer界面
     -工具-回话-点击下面窗口-锁定
     -点击上方窗口中的数据行找到下方窗口有数据的行
     -右键-关掉
     即可

select s.*,rowid 
from student s;
-- 可以在PL/SQL Developer中直接修改表数据

select * 
from V$NLS_PARAMETERS;
-- 查询表的部分数据类型的形式

1 插入数据

insert语句
注意:
①为数字列增加数据时,可以直接提供数字值或者用单引号引住
②为字符列或日期列增加数据时必须用单引号引住
③增加数据列时,数据必须满足约束条件并且必须为主键列和NOT NULL列提供数据
④增加数据时,数据必须与列的个数和顺序保持一致

1.1 直接插入数据

insert into 
table_name(column_name1,column_name2···)
values(express1,express2···)
--如果不指定列名则需要为每一列都提供数据且顺序必须与表列顺序完全一致(不推荐)

###知识例
insert into
emp(empno,ename,job,hiredate,sal)
values(1234,'MARY','CLERK',to_date('1999-01-01','YYYY-MM-DD'),default);
--日期值的处理
--指定 DEFAULT时,如果存在默认值则使用默认值,否则自动使用NULL

1.2 子查询插入数据

insert into
table_name(column_name1,column_name2,column_3···)
selectSubquery--任何合法的select语句
--可用于批量插入数据

###仅例
insert into
jobs_temp
select * from jobs where jobs.max_salary>10000;

1.3 insert 同时插入多条数据

  1. INSERT ALL 开头
  2. select 1 from dual 结尾, 不许含有, 否则会报错缺少 select 关键词. dual 可以替换不是 t_table 的任意一个表.
  3. 没插入的一条语句中间没有 , 符号.
INSERT ALL 
INTO t_table ("col1", "col2", "col3") VALUES ('val1', 'val2', 'val3')
INTO t_table ("col1", "col2", "col3") VALUES ('val1', 'val2', 'val3')
INTO t_table ("col1", "col2", "col3") VALUES ('val1', 'val2', 'val3')
select 1 from dual;


 

2 修改数据

2.1直接修改

update table_name
set cloumn_name1=express1,cloumn_name2=express2···--express也可以是select语句
[where condition]
--只有符合条件的记录才会被修改
--如果没有where子句则修改全部记录
--修改数据为空 where col=''(不是 is null)

###知识例
update cs
set job='aaaa',mgr=1234,hiredate=to_date('19990101','yyyymmdd'),deptno=default
where empno=9999;
--日期处理
--default应用(如果存在默认值则使用默认值修改数据,否则使用NULL)

2.2 子查询更新

--把emp表中工资小于3000的员工工资调整为管理者的平均水平
update emp
set sal=(select avg(sal)
         from emp 
         where job='MANAGER')
where sal<2000; 

3 删除数据

3.1 delete

delete from 
table_name
where condition;
--无where子句则删除表的全部数据
--可以用ROLLBACK回滚

3.2 truncate 清空表(格式化)

truncate table table_name;
--删除表的全部内容
--修改了表结构 属于DDL语句
--无法回滚
--REUSE STORAGE删除记录仍保存占用的空间
--DROP STORAGE删除记录立刻回收空间
--大型数据表的全部数据删除应该用TRUNCATE
--用DELETE会导致回滚段磁盘耗光,ORACLE数据库挂起

3.3 delete和truncate区别【重要】

delete 删除过程慢,容易恢复(更安全),DML,不影响高水位线
truncate 删除过程快,很难恢复,DDL,高水位线归零

高水位线:表中历史插入数据量的大高度

delete 删除后的数据恢复【了解】
    闪回: alter table able_name enable row movement;--重置行
          flashback table table_name to timestamp to timestamp('20220220 10:10:10','yyyymmdd hh24:mi:ss')

4 MERGE【记录】

结合insert和update
如果目标表有数据则更新数据为源表的数据
没有数据则将源表中对应数据插入目标表

语法:
merge into tbDst(目标表)
using tbSrc(源表)/select子句
on ________  (源表和目标表关联关系)
when matched then --如果匹配到
  update set tbDst.col=tbSrc.col --则更新
when not matched then--如果匹配不到
  insert (tbDst.cols....) values (tbSrc.cols)--则更新(此处不必是表中的全部列)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猪宝宝哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值