插入操作:元组值的插入,查询结果的插入。
最基本的插入方式:
1. insert into tablename values(val1,val2,val3```)表名后不跟列名。value值必须个数与表的列数对应。
2. insert into tablename(col1,col2,```) values(val1,val2,```)可以指定向哪些列中插入数据。(要遵循约束规范,不为空的必须给值。)
创建表的其他方式:
复制表结构+数据:
create emp2 as select * from emp;
复制表结构,不复制数据:
create table emp3 as select * from emp where 1=2;(条件不成立,不复制数据)
如果有一个集合的数据,把集合中的所有数据挨条插入。不使用单条插入,更多的是批量插入。
--删除满足条件的数据:经过事务
delete from emp2 where deptno =10;
--删除全部数据:经过事务
delete from emp2;
--truncate,删除不经过事务,一旦删除就是永久,不具备回滚。
truncate table emp2;//效率高,容易误操作,慎用。
update tablename set col1 = val1,col2 = val2 where condition;
可以更新或修改满足条件的一个列或者多个列。
--单个更新:
update tablename set ename = "heihei" where ename = "hehe";
--多个更新:
update emp set job='teacher',mgr = 7902 where epno = 15;
其语义是,修改基本表中满足条件表达式的那些元组的列值,需修改的列值在set子句中指出。
增删改是数据库的常用操作,在进行操作的时候都需要事务的保证,也就是说每次在pl/sql中执行sql语句之后,都需要完成commit操作,事务变得非常关键。
最主要的目的是保持数据一致性。如果同一份数据在同一时刻只能有一个人访问,就不会出现数据错乱,但项目中更多的是并发访问,并发访问的同时会带来数据不安全,也就是不一致。如果要保证数据的安全,最主要的方式就是加锁,MVCC。
--事务的延申:
·最基本的数据库事务,声明式事务,分布式事务。
·为了提高效率,有可能多个操作会在同一个事务中执行,那么就有可能部分成功,部分失败。基于这样的情况就需要事务的控制。
select * from emp where id = 7902 for update;
select * from emp where id = 7902 lock in share mode;
·事务:表示操作集合,不可分割,要么全部成功,要么全部失败。
--事务的开始:取决于一个DML语句;
--事务的结束:
1.正常的commit(提交)或rollback(回滚);
2.执行DDL(create,alter,drop)语句事务自动提交(效率低,建议关闭)
3.用户正常断开连接时,transaction自动提交。关闭绘画自动提交。
4.系统崩溃或断电时事务自动退回。
·执行一个ddl,dcl语句或从sql中正常退出,都会自动commit。
insert into emp(empno,ename) values(2222,'zs');
commit;
rollback;