数据库回顾1

--数据字典
      select *from all_tab_columns where table_name = 'EMP'  --查出某个表的所有字段
      select table_name from all_tables where owner = 'SCOTT' --查出某用户所有创建的表
      select *from sys.all_ind_columns where table_name = 'EMP' --查出某表的所有索引
      select *from all_constraints where table_name = 'EMP'  --查出某表所有约束
      select table_name ,comments from dictionary where table_name like '%TABLE%'; --查出模糊表名的备注

--约束:
      指对数据库插入数据的各种限制,可以在创建表的时候直接声明,也可以在表创建好以后进行添加。
      1.约束的类型:1.1 not null 不能为空;1.2 unique 不能重复 ;1.3 primary key 主键约束(不能重复,不能为空);1.4 foreign key 外键约束;1.5 on delete cascade 级联删除;1.6 check(条件) 插入数据必须满足某种条件
      
      2.约束操作:2.1 删除约束;alter table EMP drop constraint DEPT_EMP_pid_fk ;      --dept表与emp表的pid字段
                  2.2 禁用约束;alter table EMP disable constraint DEPT_EMP_pid_fk 
                  2.3 启用约束;alter table EMP enable constraint DEPT_EMP_pid_fk 
      
      

--视图:
      指封装了各种复杂查询的语句,避免写更多的sql片段,以及可以按照需求展示所需要的字段。适用于多表多字段的创建
      1.视图的创建:CREATE VIEW 视图名字(字段) AS 子查询
                    create or replace view v_wgs(stuId,stuName) 
                    as 
                    (select stuId,stuName from wgs where stuName = 'wgs'
                    with read only;
      2.查看视图的创建语句:select text from v_wgs;
      
--索引:一种提升数据库查询效率的对象;减少对数据库的io操作;与表对象分开存放;数据库自动维护
        分类:唯一索引;非唯一索引
        创建方式:自动创建:创建主键约束以及唯一性约束,数据库会自动在相应字段上创建唯一性索引
                  手动创建:在其它列上创建非唯一性索引
                  
        优点:加快了查询速度
        缺点:不便于表数据的修改,表数据修改需要重新创建索引,而且索引也会占据磁盘空间
        索引的使用原则:
              1.select操作占据大部分表操作
              2.where后使用频繁的列字段
              3.小于5M的表最好不要使用索引,表越小,越应该使用全盘扫描
              4.在该查询条件下,查询结果行数小于5%的,最好使用索引
              
        where 子句中的这个字段,必须是复合索引的第一个字段;
        复合索引的创建:
              create index i_wgs on wgs(stuName,stuRemark);
              create index i_wgs1 on wgs(stuRemark,stuName);
              这两个索引的效果不一样,有针对性
              索引 i_wgs 对 Select * from wgs where stuName='wgs'; 这样的查询语句更有效
              索引 i_wgs1 对 Select * from wgs where stuRemark='这是谁'; 这样的查询语句更有效
              
        索引的删除:drop index i_wgs;
        索引的类型:1.B树索引,采用平衡B树算法,即二叉树,左节点的键值要小于等于父节点的键值,右节点的键值要大于等于父节点的键值
                    2.位图索引:当字段的范围很小,如为男女两个选择,或ABC三个选择,字段只有几个值时B树索引没有意义,改用位图索引
                                create BItMap indsex i_wgs2 on wgs(stuSex);

        注意:要在插入大量数据以后创建索引;限制表索引的数量;删除没有必要的索引
           
        select * from user_indexes --查看使用的索引
        select *from user_ind_columns --查看使用字段的索引
        
        
--SQL的优化原则:oracle数据库有两种CBO,RBO,其中CBO按照表及索引的状态进行计划;RBO按照自己的内部计划
         1.尽量使用exists不用in,in主要用于内表(子查询数据表小)的时候,比较快,in语句会先查询子查询,然后将内表与外表结合起来一个卡迪尔集,然后在按条件进行查询,故内表数据量小时,查询快
         2.尽量使用not exists和外连接,而不是not in ,not in 不会使用索引
         3.尽量不使用!=和<>,用a>0 or a<0,原因前两者不会使用索引
         4.索引字段应设置为not null,因为二叉树不能有空的
         5.尽量不要使用"%"和"_"作为通配符的第一个字母,会导致无法使用索引
         6.where字句中避免在索引字段使用计算
         7.使用">="来代替">"符号,因为 A>2 时 ORACLE 会先找出为 2 的记录索引再
           进行比较,而 A>=3 时 ORACLE 则直接找到=3 的记录索引
         8.where后面条件要求,能过滤最多数据量的条件放到最后
         9.使用显示或者隐示计算的字段不能使用索引
         10.尽量使用别名,这样便于sql语句的解析
         11.用 UNION ALL 代替 UNION,union all不会去重,速度快
         12.通过改变 oracle 的 SGA 的大小,SGA 主要由三部分构成:共享池、数据缓冲区、日志缓冲区.

--序列 
      1.序列的创建语句:create sequere s_wgs  
                       start with 1           --初值
                       increament by 2        --增长值,步长
                       order(需要不需要最大值) --
                       cache 20               --是否需要缓冲
                       Nocycle                  --是否需要循环
                       
      2.先有nextVal后有currVal,
      
      3.用 cycle 时,用法如下:
         3.1 create sequence s_wgs start with 1 increment by 1 cycle maxvalue 3 nocache ;
             这样到 3 之后,要会重新从 1 开始
        
         3.2 使用nocycle,就可以保证多表序列ID的唯一性
        
      --注意:
      不能改变当前值,但是可以改变增量
      Alter sequence myseq increment by 3; 
      nocache可以防止数据库down的情况
      
--触发器  
     1.语句触发器:before语句以及after语句,针对语句
     2.行触发器:before行触发器以及after行触发器,针对每一行记录,每修改一行都会进行触发
     3.限制行触发器,略
     4.系统事件触发器,略
     
     注意事项:编写 DML 触发器的时,触发器代码不能从触发器所对应的基表中读取数据,编写时不会报错,但执行时会报错
     
     触发器的应用场景:1.控制数据安全,如在非工作时间不能对特殊表进行操作
                       2.统计数据,如可以统计对某个表在一定时间内的操作次数
                       3.实现数据的完整性,如实现员工工资增长不能超过原来工资的20%
                       4.实现参照完整性,约束只能实现级联删除,但触发器可以实现级联更新
                       
    个人理解:这个就像Java代码中的监听器    

    
      
CSP系统:ResourceUtil.getMessage("esales.userDefine.label.day")获取properity的配置文件对应字段内容
       SysParamUtils.getSystemParamValue("138942","138");获取系统参数的值,数据库表为t_ucp_systemparam
定时任务:           
      1.spring集成quartz做后台定时任务:如定时的刷新表数据,或定时的调用dt接口或webservice客户端
      https://www.cnblogs.com/obullxl/archive/2011/07/10/spring-quartz-cron-integration.html 
      2.spring自身集成定时任务更简单,更容易书写
      
CSP系统在页面添加菜单或按钮时,C10版本与C21版本应该注意,可能需要刷数据库五张表,实现菜单权限导航,不然会报权限错误,此时C10后台可能不报错,但前段一定会报权限错误。

CSP系统从SVN中检出来跑时,要注意/conf/serverInfo.properities中个字段的修改,报错要重点看eclipse根目录下local中的error.log日志,按照错误提示解决问题(重要),避免走弯路。

      

猜你喜欢

转载自blog.csdn.net/a5575vhj/article/details/88388018