• 数据库表设计


    一、视图

    视图:

    1、也称虚表,不占用物理空间。视图中的数据是从实际表中获得的。每次使用视图的时候,只是重新执行sql语句。

    2、用于产生视图的表叫做该视图的基表,一个视图可以从另一个视图中产生。

    3、在oracle中如果是只读视图的话,仅仅能查询基表中的数据;在其他视图中如果修改视图中的数据,基表的数据也会发生改变

    4、在oracle数据库中存在物化视图,物化视图有两种:ON DEMAND(仅在该视图需要被刷新时在进行刷新操作,经常使用)、ON COMMIT(一旦基表有了数据提交就会刷新视图,太频繁)

    视图的创建:

    create [or replace] VIEW view AS 子查询 [WITH READ ONLY];

    例如:create view v_emp as select * from emp where deptno = 10;

    授权视图:

    如果普通用户第一次创建视图,提示没有权限,要使用管理员去修改权限

    1、sqlplus /nolog

    2、conn sys/bjmsb@orcl as sysdba;

    3、grant create view to scott; 

    视图的使用:

    select * from v_emp;

    向视图中添加数据:(执行成功之后需要提交事务,绿色表示提交事务,红色表示回滚事务)

    insert into v_emp(empno,ename) values(1111,'zhangsan');

      细节注意:当你执行插入sql,但未提交事务时,此时该数据已经插入到基表中(该数据为脏数据),使用当前会话能查到,但是使用其他会话查不到。

          执行结束sql语句只是将该条数据写入缓存空间中,但并未写入该表的数据文件中。提交事务只是将该条数据刷写到与该表对应的数据文件中。

    如果定义的视图是非只读视图的话,可以通过视图向表中插入数据,如果是只读视图的,则不可以插入数据,只读视图只提供查询的需求,无法进行增删改操作

    create view v_emp2 as select * from emp with read only;

    删除视图,不会对基表中数据产生影响

    drop view v_emp2;

    当删除视图中的数据的时候,如果数据来源于多个基表,则此时不能全部进行删除,只能删除一个表中的数据

     二、序列

    1、在oracle中如果需要完成一个列的自增操作,必须要使用序列

      create sequence seq_name

        increment by n 每次增长几

        start with n       从哪个值开始递增

        maxvalue ninomaxvalue 10^27 or -1  最大值

        minvalue nino minvalue                      最小值

        cycle|nocycle                  是否有循环

        cache ninocache       是否有缓存

    2、查看当前序列的值:select my_sequence.currval from dual;

       获取序列的下一个值:select my_sequence.nextval from dual;

      注意:如果创建好序列之后,没有经过任何的使用,那么不能获取当前的值,必须要先执行nextval之后才能获取当前值

      使用序列:insert into emp(empno,ename) values(my_sequence.nextval,'hehe');

    三、数据库操作语言

    1、插入操作

      insert into tableName(xxx,yyy) values('aaa','bbb')

    2、创建表的操作

      create table emp2 as select * from emp;  复制表同时复制表数据,不会复制约束

      create table emp3 as select * from emp where 1=2;  复制表结构,不复制数据,不复制约束

    3、删除操作

      delete from tableName where condition;  条件删除

      delete from tableName;  删除整张表

      truncate table tableName;  删除整张表数据

      注意:truncate不经过事务,不能恢复,效率高,容易误操作。delete可以进行回滚操作

    4、修改操作

      update tableName set col = val1,col = val2 where condition;

    总结:增删改是数据库的常用操作,在进行操作的时候都要‘事务’的保证,事务变得非常关键

       最主要的目的是为了数据一致性

       如果同一份数据,在同一时刻只能一个人访问,就不会出现数据错乱的问题,但是在现在的项目中更多的是并发访问

       并发访问的同时带来的就是数据的不安全,也就是不一致

       如果要保证数据的安全,最主要的方式就是加锁的方式

  • 相关阅读:
    ExternalInterface.addCallback()方法,as2 和 as3的区别
    关于table的display问题
    关于table的display问题
    js表单验证是否空值的简单处理办法
    《那些年啊,那些事——一个程序员的奋斗史》——112
    《那些年啊,那些事——一个程序员的奋斗史》——111
    《那些年啊,那些事——一个程序员的奋斗史》——113
    《那些年啊,那些事——一个程序员的奋斗史》——115
    《那些年啊,那些事——一个程序员的奋斗史》——112
    《那些年啊,那些事——一个程序员的奋斗史》——115
  • 原文地址:https://www.cnblogs.com/lyc-code/p/13466989.html
Copyright © 2020-2023  润新知