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