10.oracle中的DML
10.oracle中的DML
DML: 数据库操作语言
增,删,改
在实际项目中,使用最多的是读取操作,但是插入数据和删除数据同等重要,而修改操作相对较少;
插入操作
元组值的插入
查询结果的插入
插入的方式
-- insert into tablename values(val1,val2,...) 如果表名之后没有列,只能将所有的列都插入
-- insert into tablename values(val1,val2,...) 可以指定向哪些列中插入数据
insert into emp values(2222,'haha','clerk',7902,to_date('2019-11-2','YYYY-MM-dd'),1000,500,10);
select * from emp;
-- 向部分列插入数据的时候,不是向那个列插就插入的,要遵循创建表的时候定义的规范
insert into emp(empno,ename) values(3333,'wangwu');
-- 创建表的其他方式
-- 复制表同时复制表数据,不会复制约束
create table emp2 as select * from emp;
-- 复制表结构但是不复制表数据,不会复制约束
create table emp3 as select * from emp where 1 = 2;
-- 如果有一个集合的数据,把集合中的所有数据都挨条插入的话,效率如何?一般在实际的操作中,很少一条条插入,更多的是批量插入
-- 查询结果的插入
insert into tablename (select * from emp where ename like 'nba');
删除操作
delete from tablename where condition;
-- 删除满足条件的数据
delete from emp2 where deptno = 10;
delete from tablename; 删除整张表的数据
truncate: 与delete有所不同,delete在进行删除的时候经过事务,而truncate不经过事务,一旦删除就是永久删除,不具备回滚的操作;
truncate table tablename;
更新操作
update tablename set c1= v1,c2=v2…where codition;课可以更新一个列或者多个列;
事务的前瞻
增删改是数据库的常用操作,在进行操作的时候都需要事务的保证,也就是说每次在pl/sql中执行sql语句之后都需要完成commit的操作,事务变的非常关键:
最主要的目的为了数据一致性,
如果同一份数据,在同一时刻只能有一个人可以访问,就不会出现数据访问错乱的问题;但是现在项目中更多的是并发访问,并发访问的同时带来的就是数据不安全;也就是不一致的问题;
如果是要保证数据的安全,最主要的方式就是加锁的方式, mvcc;
事务的延伸:
最基本的数据库事务
声明式事务
分布式事务
为了提高效率,有可能多个操作会在同一个事务执行,那么就有可能部分成功,部分失败,基于这样的情况就需要事务控制
select * from where xxx for update;
select * from t where xxx lock in share mode;
如果不保证事务的情况,会造成 脏读,不可重复读,幻读…