DML 数据操做语言
insert :
一、单行插入
insert into 表名(列名,列名....) values (要插入的内容)
insert into 表名 values (要插入的内容)
二、多行插入/子查询插入
insert into 表名 select ....;
数据库
单表查询:
>>>insert into dept1 values(13,'ulook','cd'); //表一共三个列要插入三个值
>>>insert into dept1(dname,loc) values('ulook','cd') ; //
>>>insert into dept1(dname,loc,deptno) values(null,null,20); //能够插入空值
>>>insert into dept1 values(default);//插入默认值,前提是建表的时候给了默认值spa
多表插入:
>>>insert into test(job) select job from emp where deptno=10; //插入的字符必须一致 事务
>>select a.* ,dbms_rowid.rowid_block_number(rowid)rb,dbms_rowid.rowid_relative_fno(rowid) rf from dept a;//能够看到插入后的数据,放到哪一个地方的。能够经过desc dbms-rowid 查看相关字段
update---修改数据库
一、update 表名 set 列名=要修改后的值; //工做中谨慎使用,会修改整个表
update 表名 set 列名=要修改后的值 where <>;
二、子查询的修改
update 表名 set 列名=(select ....)it
>>>update dept1 set deptno=20 where loc='cd';
>>>update dept1 set dname=(select ename from emp where emp=7788);//子查询的修改table
delete---删除
一、delete 表名;
delete 表名 where<>;
二、delete 表名 where (select...);
>>>delete dept1 where deptno in (select deptno from emp);
delete //并未正真删除,须要用alter 做空间回收才能真正删除
trun ;//数据真正删除用
alter table <>shrink space; //表空间的回收
merger into ---融合语句
meger into<表名1>
using <表名2> on <条件> //使用using指定数据的来源
when matchd then //当条件知足时,更新数据
update set 列名1=列名2
when not match then //当条件不知足是,插入数据
insert values (列值....)
test
SQL> create table emp1 as select ename,deptno,sal,empno from emp where deptno=10;
Table created.
SQL> select * from emp1;
ENAME DEPTNO SAL EMPNO
---------- ---------- ---------- ----------
CLARK 10 2450 7782
KING 10 5000 7839
MILLER 10 1300 7934
SQL> merge into emp1 a
2 using emp b on (a.empno=b.empno)
3 when matched then
4 update set sal=sal+1
5 when not matched then
6 insert values(b.ename,b.deptno,b.sal,b.empno);
14 rows merged.
SQL> select * from emp1
2 ;
ENAME DEPTNO SAL EMPNO
---------- ---------- ---------- ----------
CLARK 10 2451 7782
KING 10 5001 7839
MILLER 10 1301 7934
TURNER 30 1500 7844
WARD 30 1250 7521
MARTIN 30 1250 7654
SCOTT 20 3000 7788
BLAKE 30 2850 7698
JONES 20 2975 7566
ALLEN 30 1600 7499
FORD 20 3000 7902
ENAME DEPTNO SAL EMPNO
---------- ---------- ---------- ----------
SMITH 20 800 7369
ADAMS 20 1100 7876
JAMES 30 950 7900
14 rows selected.
SQL> l
1 merge into emp1
2 using emp on (emp.empno=emp1.empno)
3 when matched then
4 update set sal=emp.sal
5 when not matched then
6* insert values(emp.ename,emp.deptno,emp.sal,emp.empno)
SQL> /
14 rows merged.
SQL> select * from emp1;
ENAME DEPTNO SAL EMPNO
---------- ---------- ---------- ----------
CLARK 10 2450 7782
KING 10 5000 7839
MILLER 10 1300 7934
TURNER 30 1500 7844
WARD 30 1250 7521
MARTIN 30 1250 7654
SCOTT 20 3000 7788
BLAKE 30 2850 7698
JONES 20 2975 7566
ALLEN 30 1600 7499
FORD 20 3000 7902
ENAME DEPTNO SAL EMPNO
---------- ---------- ---------- ----------
SMITH 20 800 7369
ADAMS 20 1100 7876
JAMES 30 950 7900
14 rows selected.
SQL> select * from emp1;
ENAME DEPTNO SAL EMPNO
---------- ---------- ---------- ----------
CLARK 10 2450 7782
KING 10 5000 7839
MILLER 10 1300 7934
TURNER 30 1500 7844
WARD 30 1250 7521
MARTIN 30 1250 7654
SCOTT 20 3000 7788
BLAKE 30 2850 7698
JONES 20 2975 7566
ALLEN 30 1600 7499
FORD 20 3000 7902
ENAME DEPTNO SAL EMPNO
---------- ---------- ---------- ----------
SMITH 20 800 7369
ADAMS 20 1100 7876
JAMES 30 950 7900
14 rows selected.
SQL> select * from emp1;
ENAME DEPTNO SAL EMPNO
---------- ---------- ---------- ----------
CLARK 10 2450 7782
KING 10 5000 7839
MILLER 10 1300 7934
TURNER 30 1500 7844
WARD 30 1250 7521
MARTIN 30 1250 7654
SCOTT 20 3000 7788
BLAKE 30 2850 7698
JONES 20 2975 7566
ALLEN 30 1600 7499
FORD 20 3000 7902
ENAME DEPTNO SAL EMPNO
---------- ---------- ---------- ----------
SMITH 20 800 7369
ADAMS 20 1100 7876
JAMES 30 950 7900
14 rows selected.date
TCL--- 事务的操做,用来保证数据的一致型
事务是如何产生:
dml,ddl,dcl
事务结束:
commit/dd/exit/conn/ 断电 /rollback
commit ----事务完成 //若是在一个终端执行dml操做,若是事务未结束,其余的终端用户不可以看到我dml操做的内容可是我事务结束后,另外的终端是能够看到操做后的表
rollback---在事务为提交前才能生效 //回滚的位置是回滚到最近一次执行--commit操做的位置
咱们能够用savepoint s1设置保存点,用rollback to s1(保存点)--回到咱们想回到的位置
在进行DML操做时,会生成一个表级锁或者行级锁,只能在当前用户当前终端 才能进行操做,其余用户和终端没法操做。只有等当前事务操做完毕后才会释放锁,其余用户才能够操做。
>>>select *from emp for update ;//先申请锁表,再进行操做file