表数据增删改

创建表副本

create table 表名1 as select * from emp;

该语句用户可以理解为将emp表的表结构,表数据等内容复制到创建的表(表名1)中

简单插入

一、语法格式

insert into 表名(列名1,...,列名n)
values(1,...,值n);

二、注意事项

  • 给定值个数要与列名个数相等且顺序必须一致
  • 插入date类型数据时,需要用到to_date()转换数据类型
  • 字符串类型数据需要加单引号
  • 表名后的(列名1,…,列名n)可以省略,省略后表示插入一行全部数据,数值对应顺序为列名从左到右

三、示例
有如下表结构:

CREATE TABLE A 
(
  ano number(4) NOT NULL,
  asex VARCHAR2(3),
  age NUMBER(2),
  adate DATE
);

(1)向表中插入该数据(100,男,19,2001-12-30)

--简便写法
insert into A
values(100'男',19,to_date('2001-12-30','yyyy-MM-dd'));
--完整写法
insert into A(ano,adate,age,asex)
values(100,to_char('2001-12-30','yyyy-MM-dd'),19,'男');

查询表后后出现该条记录如下图所示:
在这里插入图片描述

从一个表中查询数据插入到另一个表中

一、语法格式

insert into 表名
select语句;

二、注意事项

  • insert表和select语句结果集的列数,列序、数据类型必须一致,列名可不同

三、示例
有如下表结构:

CREATE TABLE b 
(
  bno number(4) NOT NULL,
  bsex VARCHAR2(3),
  age NUMBER(2),
  bdate DATE
);

(1)向b表插入a表数据

insert into b
select * from a;

查询b表后出现a表的数据效果图如下:
在这里插入图片描述

修改数据

一、语法格式

update 表名 set 要修改的列名1=新值1,
					.........,
				要修改的列名2=新值2
where 条件;

二、注意事项

  • 不使用where 条件则修改该列的所有值
  • update执行顺序可做如下简单理解:先依据where条件去表中筛选数据,符合条件的将新增赋给要修改的列,不符合条件的不动
    三、示例
    (1)将a表中ano为100数据的性别改为女
update a
set asex='女'
where ano=100;

查询a表后数据如下:
在这里插入图片描述
拓展:

  • update与not exists结合可实现关联更新,用户可自行尝试,在此仅仅摆出一个简单示例用户可自行探究:
update emp a
set deptno=(select b.deptno from dept d where a.deptno=d.deptno)
where  exists(select 1 from dept d where d.deptno=a.deptno);

删除记录

一、语法格式

--1
delete from 表名 where 条件;
--2
truncate table 表名;
--3
drop table 表名;

二、注意事项

  • 1语句在不使用where条件时,效果为清空表数据
  • 2多用于清空表数据表结构仍存在,与1语句相比2语句较快,数据不能回滚且无日志
  • 3语句会删除表结构与清空表数据

三、示例

--清空a表数据
delete from a;
--清空a表数据
truncate table a;
--“毁灭”a表
drop table a;

再次执行查询语句查看效果如下:
在这里插入图片描述

rowid(“身份证号”)

rowid可以理解为人的身份证号,即使有重名的,但也可以通过身份证号唯一确定每个人

一、简单示例

select d.*,rowid from dept d;

效果图如下:
在这里插入图片描述
二、通过rowid快速删除重复记录

delete from1 a where
a.rowid>(SELECT MIN(x.rowid) FROM2 x WHERE12连接条件 and 去重条件);

用户可对该语句做如下理解,将表1与表2做自连接,根据对rowid的比较从而删除一重复记录

示例如下(删除a表中同id记录):

delete from a where
a.rowid>(select min(a.rowid) from a a1 where a.id=a1.id);

效果图如下:
在这里插入图片描述

merge into(“有则更新,无则插入”)

一、语法格式

MERGE INTO 目标表A USING  源数据表B ON(关联条件)
WHEN MATCHED THEN
UPDATE语句
WHEN NOT MATCHED THEN
INSERT语句;

二、相关逻辑

  1. 判断A、B表是否满足on条件
  2. 若匹配则用B更新A,若不匹配则将B不满足数据插入A
    三、示例
    有如下表结构:
--建表语句
CREATE TABLE A_MERGE 
( 
 ID  NUMBER NOT NULL, 
 NAME VARCHAR2(12) NOT NULL, 
 YEAR NUMBER 
); 
CREATE TABLE B_MERGE 
( 
 ID  NUMBER NOT NULL, 
 AID NUMBER NOT NULL, 
 NAME VARCHAR2(12) NOT NULL, 
 YEAR NUMBER, 
 CITY VARCHAR2(12) 
);
--数据插入
INSERT INTO A_MERGE VALUES(1,'liuwei',20); 
INSERT INTO A_MERGE VALUES(2,'zhangbin',21); 
INSERT INTO A_MERGE VALUES(3,'fuguo',20); 
COMMIT; 
INSERT INTO B_MERGE VALUES(1,2,'zhangbin',30,'吉林'); 
INSERT INTO B_MERGE VALUES(2,4,'yihe',33,'黑龙江'); 
INSERT INTO B_MERGE VALUES(3,3,'fuguo',NULL,'山东'); 
COMMIT;

在这里插入图片描述

执行下列语句后

merge into A_MERGE a using B_MERGE b on (a.ID=b.AID)
when matched then
update set a.year=b.year
when not matched then
insert(a.id,a.name,a.year) values(b.aid,b.name,b.year);

a表数据会发生如下变化(b表数据不变):
在这里插入图片描述

事务提交(commit)与事务回滚(rollback)

  • 事务回滚——回退到提交之前
  • 事务提交——针对更新数据(insert、update、delete),提交后无法回滚
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值