• Oracle day04 DML_事务_序列_视图_数据类型_DDL


    DML
    insert关键字
    作用:往表中插入一条(多条)数据

    语法1:元祖值式的插入
    语法1: insert into tablename(column1,column2,...,columnN) values(value1,value2,...,valueN); 
          insert   into    表名      (列1      ,列2    ,...., 列N  ) values(值1  ,值2,.... , 值N)   

                  如果往表中所有的列都添加数据时,表后面的字段可以不添加,直接写values

                  insert   into    表名  values(值1  ,值2,.... , 值N)


    语法2:查询结果式的插入
    语法2: insert into tablename sub-query 

    delete关键字
    作用:从表中删除数据
    语法: delete [from] tablename [where condition] 

    update关键字
    作用:更新表中的数据
    语法: update tablename set column1=value1,column2=value2,...,columnN=valueN [where condition] 

    事务

    事务(Transaction)是一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位。

    目的:保证数据库的完整性

    特点:事务不能嵌套

    如何开启事务:
        一个DML语句(insert、delete、update)的执行

    如何关闭事务:
        1.显示的调用commit或rollback
        2.当执行DDL(Create、Alter、Drop)语句事务自动提交
        3.用户正常断开连接时,事务自动提交。
        4.系统崩溃或断电时事务自动回滚

    序列

    一、概念:
        序列(sequence):oracle专有的专有对象
    二、作用:
        产生一个自动递增的数列

    三、创建一个序列:

        create sequence seq_name
        increment by 1
        start with 1

    四、使用序列:
        序列名.nextval
        序列名.currval

    视图

    一、定义:
        视图(view):一种不占用物理空间的虚表。

    二、作用:
        将一些查询复杂的SQL语句变为视图,便于查询

    三、语法:

    create [or replace] view v$_name
    as sub-query
    [with read only]



    四、需要注意的点:
        1.视图也可以从视图中产生
        2.我们把用于产生视图的表称之为基表
        3.我们对视图进行数据修改就是对基表进行数据修改,反之亦然
        4.不能对多张表的数据,通过视图进行修改。

    五、使用视图需要注意
        1.一般来讲,只有重复出现非常多次的SQL语句,才会创建视图
        2.数据库迁移,视图也得随之迁移,否则在新数据中是不能用的
        3.创建视图时,尽量不要带or replace

    数据类型

    数据类型分类:
        1.number(x,y)  数字类型,x表示最大长度,y表示精度
        2.varchar2(x) 可变字符串,x表示最大长度
        3.char(x) 定长字符串,x表示最大长度
        4.long 长字符串,最大2G
        5.Date,日期(年月日时分秒)
        6.TIMESTAMP 时间戳,精确到微秒

    DDL

    1.create关键字作用:用于创建数据库对象(表、视图、序列等)

    语法:    create table tablename(column1 dataType, column2 dataType,...,columnN dataType) 
    语法2: create table tablename as subquery 

    2.alert关键字
    作用:用于修改数据库对象(表、视图、序列等)

    语法:
        1) alter table tablename add(columnname dataType) 
        2) alter table tablename modify( columnname dataType) 
        3) alter table tablename drop [column] columnname 

    3.drop关键字
    作用:用于删除数据库对象(表、视图、序列等)

    语法:
         drop table tablename 

    使用_例子:

    DML

    --insert关键字

    --作用:往表中插入一条(多条)记录

    --元祖(tuple)值式的插入(一次插入一条记录)
    --语法1: insert into tablename(column1,column2,...,columnN) values(val1,val2,...,valN) 
    --例子:

    insert into emp(empno,ename,sal,deptno) values(9527,'hua%an',100,40);


    --如果往表中所有的列都添加数据时,表后面的字段可以不添加,直接写values

    insert into emp values(8888,'xiaoqiang','aaa',9527,sysdate,0,null,40);


    --查询结果式的插入
    --语法2: insert into tablename sub-query 
    --例子:

    insert into emp_temp (select * from emp where deptno = 20)


    --创建一个emp的临时复制表

    create table emp_temp as select * from emp where 1 = 2

     

    --delete关键字

    --作用:删除表中的数据
    --语法: delete [from] tablename [where condition] 
    --例子:

    delete emp_temp where empno = 8888;

    小心使用  delete emp_temp; 

     

    --update关键字

    --作用:更新表中的数据
    --语法: update tablename set column1=value1,column2=value2,...,columnN=valueN [where condition] 
    --例子:

    update emp_temp set sal = sal*1.2 where ename = 'SMITH';

    事务

    --转账

    update emp_temp set sal = sal - 500 where ename='JONES';
    update emp_temp set sal = sal + 500 where ename='SMITH';
    commit;
    rollback;
    
    create table aaa(id number,name varchar2(20));
    
    insert into emp_temp(empno,ename) values(1111,'cai10');
    insert into emp_temp(empno,ename) values(2222,'cai20');
    --savepoint 存档点 savepoint sp1;
    insert into emp_temp(empno,ename) values(3333,'cai30'); insert into emp_temp(empno,ename) values(4444,'cai40'); rollback to sp1;


    --事务的四个特性:ACID
    --原子性(A)
    --一致性(C)

    update emp_temp set sal = 5000 where empno=1111
    update emp_temp set sal = sal+1000 where empno = 1111;


    --隔离性(I)
    --持久性(D)

    用户管理

    --1.创建一个账户

    create user zhangsan identified by 123456;


    --2.修改账户的密码

    alter user zhangsan identified by 654321;


    --3.删除一个账户 [cascade 表示是否级联删除]

    drop user zhangsan;


    --4.让一个用户的密码失效

    alter user zhangsan password expire;


    --5.锁定、解锁一个账户

    alter user zhangsan account lock;
    alter user zhangsan account unlock;


    --DCL

    --grant授予权限
    --revoke收回权限

    --1.给用户授权
    --允许用户登录

    grant create session to zhangsan;


    --给账户授权可以操作表

    grant all on scott.emp_temp to zhangsan;


    --2.取消用户的权限

    revoke all on scott.emp_temp from zhangsan;

    --创建序列

    create sequence seq_emp_temp
    increment by 1
    start with 1


    --使用序列

    --通过序列名.next_val
    自增序列: select seq_emp_temp.nextval from dual; 
    查询序列: select seq_emp_temp.currval from dual; 
    使用一次加一行序列加一: insert into emp_temp(empno) values(seq_emp_temp.nextval)


    视图

    --登录到sys账户给scott赋予创建视图的权限: grant create view to scott; 


    --1.视图的创建

    create view v$_emp_dept
    as
    select ename,sal,job,dname from emp,dept where emp.deptno = dept.deptno;



    --视图也可以从视图中产生

    create view v$_emp_dept_tem
    as
    select ename,sal from v$_emp_dept




    --修改视图的数据,就是修改基表的数据

    create or replace view v$_emp
    as
    select empno,ename from emp
    with read only
    
    select * from v$_emp;
    select * from emp;
    
    update emp set sal = 8888 where empno = 9527;




    --视图的优点:可以使某些重复出现SQL语句变得更为简单
    --视图的缺点:1.如果修改基表的结构,视图失效
    --           2.增加数据库的维护成本
    --           3.视图会被覆盖掉
    --           4.一般情况下,不要对视图进行DML操作

    --视图的例子

    select dname, grade
      from (select deptno, avg_sal, grade
              from (select deptno, avg(sal) avg_sal from emp group by deptno) t,
                   salgrade s
             where t.avg_sal between s.losal and s.hisal) t1,
           dept
     where t1.deptno = dept.deptno
       and t1.grade =
           (select min(grade)
              from (select deptno, avg_sal, grade
                      from (select deptno, avg(sal) avg_sal
                              from emp
                             group by deptno) t,
                           salgrade s
                     where t.avg_sal between s.losal and s.hisal));

     
    --为上面的SQL中重复出现的sql语句创建视图

    create view v$_dept_avgsal
    as
    select deptno, avg_sal, grade
              from (select deptno, avg(sal) avg_sal from emp group by deptno) t,
                   salgrade s
             where t.avg_sal between s.losal and s.hisal


    --利用视图替换上面的sql语句

    select dname, grade
      from v$_dept_avgsal t1,
           dept
     where t1.deptno = dept.deptno
       and t1.grade =
           (select min(grade)
              from v$_dept_avgsal);


    --删除视图所表示的基表

    create view v$_aaa
    as
    select * from aaa;


    --删除表 aaa: drop table aaa;
    --查询视图: select * from v$_aaa;
    --删除视图 v$_aaa: drop view v$_aaa; 


    --DDL


    --create


    --作用:用来创建数据库的对象(表,视图,序列,索引等)
    --语法1: create table tablename(column1 dataType, column2 dataType,...,columnN dataType) 
    --例子:

    create table t_user(
    id number,
    username varchar2(30),
    password varchar2(30)
    );


    --语法2: create table tablename as subquery 


    --例子:

    create table emp_e1 as select * from emp where 1=1;


    --alter


    --作用:用来修改数据库的对象(表,视图,序列,索引等)
    --语法: alter table tablename [modify/add/drop] 
    --例子1:

    alter table emp_e1 modify(ename varchar2(10));
    insert into emp_e1(empno,ename) values(9898,'cai10cai10cai');


    --例子2:

    alter table emp_e1 add(phone varchar2(11));


    --例子3:

    alter table emp_e1 drop column phone;
    
    select * from emp_e1



    --drop
    --作用:用来删除数据库的对象(表,视图,序列,索引等)
    --语法  drop table tablename 
     drop table emp_e1; 

  • 相关阅读:
    JS实现在线ps功能
    Vmware 下安装linux虚拟机
    一文了解:Redis主从复制
    一文了解:Redis过期键删除策略
    一文了解:Redis的AOF持久化
    一文了解:Redis的RDB持久化
    一文了解:Redis事务
    一文了解:Redis基础类型
    并发一:Java内存模型和Volatile
    干了这杯java之ThreadLocal
  • 原文地址:https://www.cnblogs.com/aknife/p/10738282.html
Copyright © 2020-2023  润新知