插入,更新,删除数据

oracle提供了功能丰富的数据库管理语句

包括有效的向数据库中插入数据的insert语句

更新数据的update语句

以及当数据不再使用时删除数据的delete语句

更改数据之后一定要使用提交操作,否则只保存在内存中,别人无法查看到更改

  • Rollback;

    • 回滚
  • commit;
    • 提交

1插入数据

准备表

SQL> create table person(
2 id number(9) not null,
3 name varchar2(40) not null,
4 age number(9) not null,
5 info varchar2(50) null,
6 primary key(id)
7 );
表已创建。

1.1表的所有字段插入数据

向表中所有宇段插入值的方法有两种

  • 一种是指定所有字段名 ,
  • 另一种是完全不指定字段名

语法

INSERT INTO table_name (column_list) VALUES (value_list);

1指定所有字段名

插入数据时,不需要按照表定义的顺序插入,只要保证值的顺序与列宇段的顺序相同就可以

SQL> insert into person(id,name,age,info)
2 values(1,'Green',21,'lawyer'); 已创建 1 行。

2完全不指定 字段名

值列表为每一个字段列指定插入值,并且这些值的顺序必须和person表中字段定义的顺序相同

SQL> insert into person
2 values(2,'Mary',24,'Musician'); 已创建 1 行。

当需要插入空值时,可以使用null关键字或者''

SQL> insert into person
2 values(3,'meditation',24,null); 已创建 1 行。

1.2为表的指定字段插入数据

在person表中,插入一条新记录,name值为Willam,age为20

SQL> insert into person(id,name,age)
2 values(4,'Willam',20); 已创建 1 行。

1.3同时插入多行数据

SQL> insert into person(id,name,age)
2 select 5,'Harry',21 from dual
3 union all
4 select 6,'harriet',19 from dual; 已创建2行。

1.4将查询结果插入到数据中

语法

insert into table_name1(column_list1)
select (column_list2) from table_name2 where (condition)
  • table_name1 指定待插入数据的表
  • column_list1 指定待插入表中要插入数据的那些列
  • table_name2 指定插入数据是从哪个表中查询出来的
  • column_list2 指定数据来源表的查询列.该列表必须和column_list1 列表中的字段个数相同,数据类型相同
  • condition 指定 SELECT 句的查询条件

准备person_old表

SQL> create table person_old(
2 id number(9) not null,
3 name varchar2(40) not null,
4 age number(9) not null,
5 info varchar2(50) null,
6 primary key(id)
7 );
表已创建。

插入数据

SQL> insert into person_old(id,name,age)
2 select 7,'Evans',23 from dual
3 union all
4 select 8,'Dale',29 from dual; 已创建2行。

将person_old中的两条数据添加到person中

SQL> insert into person(id,name,age)
2 select id,name,age from person_old; 已创建2行。
SQL> select id,name,age from person;

        ID NAME               AGE
---------- ----------- ----------
1 Green 21
2 Mary 24
3 meditation 24
4 Willam 20
5 Harry 21
6 harriet 19
7 Evans 23
8 Dale 29
  • 从结果可以看到,person表中多了两条记录
  • id列一般是自增的主键,在插入时要保证该字段的唯一性
  • 如果不能确定,可以插入的时候忽略该字段,只插入其他字段的值

2更新数据

oracle中使用update语句更新表中的记录,

可以更新特定的行,或者更新所有的行

语法

update table_name
set column_name1=value1,...column_namen=valuen
where (condition);

更新id值为6的记录,将age字段改为25,将name字段改为LiMing

SQL> update person
2 set age=25,name='LiMing'
3 where id=6; 已更新 1 行。

更新age值为19~23的记录,将info字段值改为student

SQL> update person
2 set info='student'
3 where age between 19 and 23; 已更新4行。
SQL> select * from person;

        ID NAME                 AGE INFO
---------- ------------- ---------- ----
1 Green 21 student
2 Mary 24 Musician
3 meditation 24
4 Willam 20 student
5 Harry 21 student
6 LiMing 25
7 Evans 23 student
8 Dale 29

2.2联表更新

将person表和person_old表中id列相同的数据的 info列改为person表的info列

SQL> select * from person_old;

        ID NAME                    AGE INFO
---------- ---------------- ---------- -----------
7 Evans 23
8 Dale 29

update

SQL> update person_old p1
2 set info=(select info from person p2 where p1.id=p2.id)
3 where exists(select 1 from person p2 where p1.id=p2.id); 已更新2行。
SQL> select id,name,info from person_old;

        ID NAME          INFO
---------- ------------- ---------
7 Evans student
8 Dale SQL>

merge into

将person表和person_old表中id列相同的数据的 info列改为person表的info列

SQL> Rollback;
回退已完成。 SQL> select * from person_old;
ID NAME AGE INFO
---------- ------- ---------- ------
7 Evans 23
8 Dale 29
SQL> merge into person_old p1
2 using person p2
3 on(p1.id=p2.id)
4 when matched then
5 update
6 set
7 p1.info=p2.info; 2 行已合并。
SQL> select * from person_old;

        ID NAME        AGE INFO
---------- -------- ------ ----
7 Evans 23 student
8 Dale 29
SQL>
语句 描述
merge into: 关键字,后跟主表表名
using: 用,后跟源数据,可以是一个表,也可以是一个结果集
on: 关键字, 后面括号内跟关联条件;
when matched then: 即当满足on后条件时,执行更新操作,即后面跟的update;
when not matched then: 即当on后的条件不满足,要执行的操作

3删除数据

delete语句允许使用where子句指定删除条件

3.1删除单行数据

SQL> delete from person
2 where id=7;
已删除 1 行。
SQL> select * from person where id=7;
未选定行

3.2删除多行数据

SQL> delete from person
2 where info is null;
已删除3行。
SQL> select * from person where info is null;
未选定行
SQL> delete from person
2 where id between 4 and 8;
已删除2行。
SQL> select * from person
2 where id=4;
未选定行

3.3删除全部数据

SQL> select count(1) from person;
COUNT(1)
----------
2
SQL> delete from person;
已删除2行。
SQL> select count(1) from person;
COUNT(1)
----------
0

3.4truncate清除表中所有数据

SQL> Rollback;
回退已完成。 SQL> select count(1) from person;
COUNT(1)
----------
8
SQL> truncate table person;
表被截断。 SQL> select count(1) from person;
COUNT(1)
----------
0

3.5truncate和delete区别

  1. delete是DML语句,需要提交; truncate 是DDL语句,不需要提交;
  2. delete可以删除一行或者多行数据,truncate是针对全表数据;
  3. 当数据量比较大时,delete会比较慢,因为要写日志,方便数据恢复.truncate则很快,因为只写少量日志,因此也难以恢复;

oracle插入,更新,删除数据的更多相关文章

  1. MariaDB 插入&更新&删除数据(8)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...

  2. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

  3. sqlserver 插入 更新 删除 语句中的 output子句

    官方文档镇楼: https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008/ms177564(v=sql.100) 从 ...

  4. MySQL基本SQL语句之数据插入、删除数据和更新数据

    一.INSERT插入数据: 方法一:批量插入 基本语法: INSERT INTO tb_name (col1, col2, ...) VALUES (val1, val2, ...)[,(val1, ...

  5. Oracle恢复已删除数据

    Oracle恢复已删除的数据,主要有两种方法:SCN和时间戳. 一.通过SCN恢复删除且已提交的数据 1.获得当前数据库的scn号 select current_scn from v$database ...

  6. oracle 恢复table删除数据 恢复package(使用闪回)

    好久没写东西了,今天写一篇凑个数吧,来公司一年多了,感觉自己到了一个小瓶颈期了. 以前每天很多新东西,都是忙着学,感觉没时间写博客总结一下,大部分都是写笔记,现在又是没东西可以写,每天干着95%都是重 ...

  7. Hibernate更新删除数据后,再查询数据依然存在的解决办法

    删除数据后,重新查询了数据库,DB中记录已经删除了,但是数据依然能查询到,网上都说是Hibernate的缓冲问题. 我对session进行了clear,flush,并且在事务和查询中都对session ...

  8. Mysql添加更新删除数据-表

    例如 此处拥有一个表名为 uuser 为表添加新数据 ,'); ,'); ,'); 假如只想添加uid和uname ,'小张'); 那么pas自动填充为NULL. 为表更新数据 这里把小王的pas改成 ...

  9. MySQL 向表中插入、删除数据

    一.向表中插入一条信息 1.查看表中的数据 mysql> SELECT * FROM user; +----+---------+----------+ | id | account | pas ...

随机推荐

  1. 基于Groovy搭建Ngrinder脚本调试环境

    介绍 最近公司搭建了一套压力测试平台,引用的是开源的项目 Ngrinder,做了二次开发,在脚本管理方面,去掉官方的SVN,引用的是Git,其他就是做了熔断处理等. 对技术一向充满热情的我,必须先来拥 ...

  2. (day29) 进程互斥锁 + 线程

    目录 进程互斥锁 队列和堆栈 进程间通信(IPC) 生产者和消费者模型 线程 什么是线程 为什么使用线程 怎么开启线程 线程对象的属性 线程互斥锁 进程互斥锁 进程间数据不共享,但是共享同一套文件系统 ...

  3. Spring(五)Spring缓存机制与Redis的结合

    一.Redis和数据库的结合 使用Redis可以优化性能,但是存在Redis的数据和数据库同步的问题. 例如,T1时刻以将 key1 保存数据到 Redis,T2时刻刷新进入数据库,但是T3时刻发生了 ...

  4. python dict(字典)

    补充知识点1: 数据类型的划分:可变数据类型.不可变数据类型 可变数据类型:     元组,bool,int,str      --可哈希 不可变数据类型:  list,dict,set        ...

  5. Ajax自我总结

    一念起.万水千山皆有情. 一念灭.沧海桑田已无心.     ------ 随记 本文主要针对ajax原理介绍,很少涉及实例,主要用于对知识的梳理总结,方便以后学习和查询... Ajax 一.Ajax是 ...

  6. null与undefined的区别?

    古之立大事者,不惟有超世之才,亦必有坚忍不拔之志. ——北宋· 苏 轼<晁错论> 1.首先看一个判断题:null和undefined 是否相等     console.log(null== ...

  7. MATLAB实例:聚类初始化方法与数据归一化方法

    MATLAB实例:聚类初始化方法与数据归一化方法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 聚类初始化方法:init_methods.m f ...

  8. 暑期集训20190729 字典序(dictionary)

    [题目描述] 你需要构造一个1~n的排列,使得它满足m个条件,每个条件形如(ai,bi),表示ai必须在bi前面. 在此基础上,你需要让1尽可能靠前,然后你需要让2尽可能靠前,然后是3,4,5,…,n ...

  9. 网络安全-主动信息收集篇第二章-二层网络扫描之arping

    arping二层网络发现 介绍工具:arping arping主要查看IP的MAC地址 缺点:工具本身只能ping一个IP地址,不能ping一个IP段.但是可以通过脚本将整个网络中的IP进行扫描. 脚 ...

  10. [考试反思]1024csp-s模拟测试85:以为

    愈发垃圾. T1基本全场切(除了RP<-inf的zkt和把人擦) 然后T2想了半天逐渐趋近于正解,但是因为数据有问题锅了25分,没什么好说的.T3连题意转化都没有完成.括号匹配转为+1/-1做法 ...