第一周

ArcGIS安装问题和Git知识

1、ArcGIS10.1安装问题

安装过程中工具箱类打开为空白,没有任何工具。解决办法:由于IE8不支持工具显示,安装IE9后显示正常。

 

2、RSA非对称加密算法

Git的.ssh文件利用了RSA非对称加密算法,是利用了数论里的欧拉定理来完成公钥和私钥生成过程。两个质数相乘容易,因式分解困难,所以非常难破解。

http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

3、Git常用操作命令

查看状态git status,添加git add ***,提交git commit –m “message”,检出git checkout --***.

http://www.cnblogs.com/52fhy/p/3973887.html 快速上手

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 全面

ORACLE基础知识

1、Oracle基础概念

  1. 只有oracle实例才能访问oracle数据库管理系统,在安装oracle的时候系统是安装oracle实例,再安装oracle数据库。
  2. 配置监听:通过Net Manager来进行配置。
  3. 企业管理器:oracle11g的企业管理器不再提供C/S控制,而是通过B/S进行控制。https://localhost:1158/em   打开网址之前需要额外启动OracleDBConsoleorcl服务。
  4. Oracle用户、对象管理在企业管理器中进行。创建用户时,有默认的表空间、概要文件、系统、对象、角色、限额这些常用功能。

1)        默认的表空间(USERS和TEMP),表空间实际上是储存的物理结构,可以通过限额来分配表空间的储存大小。不要选SYSTEM作为表空间,因为那是系统储存的表空间,像电脑的C盘一样,别的用户用储存的东西过多,会导致系统的触发器和查询效率降低。

2)        概要文件default:主要用来设置用户登录时间,登录限制,密码错误限制等配置。

3)        系统权限:主要是对表结构、视图、触发器等高级操作如下图:

 

4)        对象权限:别的用户所建立指定表格的增删改查权限。如下图

 

5)        角色:系统权限和对象权限的一个集合。可以将角色授予用户,被授予角色的用户会自动拥有角色所具有的权限。如果修改了角色所拥有的权限,则被授予角色的用户的权限也会随之自动修改。

  1. PLSQL Developer打开命令窗口,输入ed回车可以打开文本编辑器,保存后可以输入/,回车运行。
  2. DML: Data Manipulation Language 数据操纵语言(增删改查)。DDL:  Data Definition Language 数据定义语言(定义数据表结构、表创建、索引)。DCL:  Data Control Language 数据控制语言(数据访问,提交回滚、授予权限等)。
  3. desc tableName;显示表的列信息。或describe tableName
  4. select *** from tableName; 中可以进行加减乘除运算。若列中有空值,则运算结果也为空值。空值不等于0!运算结果为空不是0;
  5. 起别名,要么加AS关键字,要么用双引号。只有在起别名的时候用双引号!
  6. 连接符 ||,类似于java print字符串中的加号。
  7. 单引号表示字符串。
  8. 单行函数,一条记录产生一个结果,比如日期转换、大小写转换等。多行函数,聚合函数,比如求一个部门多个员工的平均工资,多条记录产生一个结果。
  9. IF-THEN-ELSE:可以在Select中进行case表达式判断。或者用DECODE函数。
  10. 多表连接查询:连接N个表至少需要N-1个连接条件。
  11. 等值连接和非等值连接。相等、在一个范围之间。
  12. 外连接和内连接。内连接不包含不匹配的行,外连接返回不匹配的左边的或者右边的所有行。
  13. 分组函数。SELECT  col,  function(col) FROM tableName [WHERE condition group by col]. 在SELECT 列表中所有未包含在组函数中的列都应该包含在 GROUP BY 子句中。SELECT   department_id, AVG(salary) FROM  employees GROUP BY department_id  HAVING groupConditon;
  14. 表:基本数据存储集合,由行和列组成。USER_TABLES
  15. 视图:从表中抽取逻辑上相关的数据集合。USER_VIEWS
  16. 序列:提供有序的数值。USER_SEQUENCES
  17. 索引:提高查询效率。 USER_INDEXES  USER_IND_COLUMNS
  18. 同义词:给对象起别名。USER_CATALOG

2、SQL查询命令注意点

3、常见数据库对象

4、表对象操作

创建新表,删除表,清空表,修改列,改变对象名称

  1. CREATE TABLE tableName()
  2. DROP  TABLE tableName
  3. TRUNCATE TABLE tableName
  4. ALERT TABLE tableName ADD|MODIFY|(DROUP COLUMN)|(REAME COLUMN)
  5. RENAME objectName TO newName

5、数据库事务

一组逻辑操作单元,是数据从一种状态转变到另外一种状态。

  1. 事务组成

1)        一个或多个DML 语句

2)        一个 DDL(Data Definition Language – 数据定义语言) 语句

3)        一个 DCL(Data Control Language – 数据控制语言) 语句

  1. 数据库事务以第一个DML语句执行作为开始,以commit、rollback、DDL语句(自动提交)、用户回话正常结束、系统异常终止,作为结束。
  2. SAVEPOINT保存点,可以回滚至保存点。
  3. 提交或回滚前的数据状态:

1)        其他用户不能看到当前用户所做的改变,直到当前用户结束事务。

2)        DML语句所涉及到的行被锁定, 其他用户不能操作。阻塞

3)        执行 DML 操作的用户可以通过 SELECT 语句查询之前的修正

  1. 提交后的数据状态

1)        数据的改变已经被保存到数据库中。改变前的数据已经丢失。所有用户可以看到结果。

2)        锁被释放,其他用户可以操作涉及到的数据。

3)        所有保存点被释放

  1. 回滚后的数据状态

1)        数据改变被取消。修改前的数据状态被恢复。锁被释放

6、数据库约束

约束CONSTRAINT:表的强制规定。可以在表级(作用多或一列)、列级(作用一列)定义约束。

  1. 约束分为constraint_type

1)        NOT NULL 非空

2)        UNIQUE  唯一

3)        PRIMARY KEY 主键 primary key (col)

4)        FOREIGN KEY 外键 foreign key (col) references tableName (col2)

5)        CHECK 检查 check (col > ***)

  1. 定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。
  2. 查询表格的约束。SELECT constraint_name, constraint_type,  search_condition FROM      user_constraints WHERE table_name = 'EMPLOYEES';

7、数据库视图

存储起来的 SELECT 语句

  1. 使用视图的原因

1)        控制数据访问

2)        简化查询(不用去连表查询,视图已经连表完成)

3)        避免重复访问相同的数据

  1. 创建或修改视图:CREATE OR REPLACE VIEW viewName as subquery
  2. ROWNUM伪列,只能使用 < 或 <=,而用 =, >, >= 都将不能返回任何数据。伪列,就相当于Excel中最左边的行编号。分页操作:

select * from (

       Select rownum rn , A.* from (    //rn重新编号

              Select * from tableName    //所有数据

)  where rownum < 40  //最大范围

) where rn > 10; //最小范围

比如:

select * from(

       select rownum rn, A.* from( select last_name, salary from employees order by salary desc ) A

       where rownum < 5

) where rn > 2

8、数据库序列

序列SQUENCE:可供多个用户用来产生唯一数值的数据库对象。

  1. 序列的作用:

1)        自动提供唯一的数值,共享对象

2)        主要用于提供主键值

3)        将序列值装入内存可以提高访问效率

  1. 序列在下列情况下出现裂缝:

1)        回滚

2)        系统异常

3)        多个表同时使用同一序列

9、数据库索引

  1. 索引的作用:

1)        一种独立于表的模式对象,可以存储在与表不同的磁盘或表空间中

2)        索引被删除或损坏, 不会对表产生影响,其影响的只是查询的速度

3)        索引一旦建立,Oracle 管理系统会对其进行自动维护,而且由 Oracle 管理系统决定何时使用索引。用户不用在查询语句中指定使用哪个索引

4)        在删除一个表时,所有基于该表的索引会自动被删除

5)        通过指针加速 Oracle 服务器的查询速度

6)        通过快速定位数据的方法,减少磁盘 I/O

  1. 什么时候创建索引,表如果经常更新就不要创建索引了

1)        列中数据值分布范围很广

2)        列经常在 WHERE 子句或连接条件中出现

3)        表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%

  1. 注意:索引不需要用,只是说我们在用name进行查询的时候,速度会更快。当然查的速度快了,插入的速度就会慢。因为插入数据的同时,还需要维护一个索引。
  2. 同义词synonom,为数据对象定义同义词

10、同义词

1)        方便访问其它用户的对象

2)        缩短对象名字的长度

3)        创建同义词CREATE SYNONYM e FOR employees;使用同义词select * from e;

 

ORACLE高级操作

1、Oracle控制用户权限

用system来登录,具有DBA权限,可以创建用户。

1.创建用户

CREATE USER user  IDENTIFIED BY   password;

2.用户系统权限

GRANT privilege [, privilege...]  TO user [, user| role, PUBLIC...];

1)  权限列表

CREATE SESSION(创建会话)登录

CREATE TABLE(创建表)

CREATE SEQUENCE(创建序列)

CREATE VIEW(创建视图)

CREATE PROCEDURE(创建过程)

3. 创建用户表空间。

用户拥有create table权限之外,还需要分配相应的表空间才可开辟存储空间用于创建的表

ALTER USER atguigu01 QUOTA UNLIMITED ON users

4.创建角色并赋予权限

创建角色:CREATE ROLE manager;

赋予系统权限:GRANT create table, create view TO manager;

将角色赋予用户:GRANT manager TO DEHAAN, KOCHHAR;

5.修改密码

ALTER USER scott  IDENTIFIED BY lion;

6.对象权限

不同的对象具有不同的对象权限

对象的拥有者拥有所有权限

对象的拥有者可以向外分配权限,通过对象拥有这才可以进行分配。

GRANT object_priv [(columns)]

 ON   object

 TO {user|role|PUBLIC}//public向数据库中所有用户分配权限

 [WITH GRANT OPTION]; //使用户同样具有分配权限的权利

列子:

GRANT  select

ON     employees

TO     sue, rich;

Grant succeeded.

收回对象权限:

REVOKE {privilege [, privilege...]|ALL}

ON  object

FROM   {user[, user...]|role|PUBLIC}

[CASCADE CONSTRAINTS];

2、SET运算符

将多个查询用 SET 操作符连接组成一个新的查询

UNION/UNION ALL  去重/不去重

INTERSECT  交集

MINUS  差集

比如:注意,列要一一对应。

SELECT employee_id, job_id

FROM   employees

UNION

SELECT employee_id, job_id

FROM   job_history;

3、高级子查询

待补充。周末学习。

 

PLSQL知识

1、基本语法

PL/SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE 数据库进行访问。由于该语言 集成于数据库服务器中, 所以PL/SQL 代码可以对数据进行快速高效的处理。

PL/SQL由三个块组成:声明、执行、异常。块结构如下:

DECLARE

/*  声明部分 :  在此声明 PL/SQL 用到的变量 , 类型及游标,以及局部的存储过程和函数 */

BEGIN

/* 执行部分 : 过程及 SQL  语句 ,  即程序的主要部分 */

EXCEPTION

/*  执行异常部分 :  错误处理 */

END;

其中 执行部分是必须的。

Plsql Dev中需要设置set serveroutput on;否则看不到程序输出结果。

PLSQL块主要有三类:

1)无名块,动态构造,只执行一次。2)子程序,存储在数据库中的存储过程、函数和包。当数据库建立好后,可以在其它程序中调用它们。3)触发器,当数据库发生一些操作时,会自动调用它们。

2、PLSQL的好处

B/S架构中,瓶颈是网络IO,进行大量的数据交换会降低传输效率。利用PLSQL将数据处理放在服务器中进行,会省去了数据在网络中交换的时间。

PLSQL也可以嵌套在客户端工具中,方便使用。

2、变量自定义类型

1)%type获取已定义的某个已经变量类型相同,或者与数据表中某个列的数据类型相同。相当于一个java类的某一个字段。

declare

  type test_resc is record(

       l_name employees.last_name%type,

       d_id employees.department_id%type);

   v_emp test_resc;

2)%rowtype获取对应表的所有列的类型。相当于一个java类。

declare

  v_emp employees%rowtype;

begin

  select * into v_emp from employees where employee_id = 200;

  dbms_output.put_line(v_emp.last_name);

end;

3、流程控制

条件判断(两种)

1)if … then … elsif …. Then … Else ….   End if;   注意是elsif不是else if

2)case selector  when expression1 then result1 when expression2 then result2 else result  end;

循环三种

1)Loop  要执行的语句;  exit  when 条件语句  //满足条件退出    end loop;

2)while 布尔表达式 loop 要执行的语句;  end loop;

3)for 循环计数器 in [reverse] 下限… 上限 loop   要执行的语句; end loop;

Reverse 循环会自动减1,否则默认自动加1,因此循环变量必须是整数。

declare

  type dep_table_type is table of employees%rowtype;  //定义一个储存employee表的数组类型。

  my_dep_table dep_table_type := dep_table_type();    //初始化

begin

  my_dep_table.extend(5);   //容量为5

 

  for i in 1 .. 5 loop   //开始循环

      select * into my_dep_table(i)   //每次记录在第i个中

      from employees

      where employee_id = 100;

  end loop;

 

  dbms_output.put_line(my_dep_table(1).employee_id);  //输出

end;

标号和goto

<<label>>标号   goto label

4、游标的使用

类似于java中的Iterator。迭代器。对于处理多行记录的事务经常使用游标来实现。

游标是一个指向上下文的句柄(handle)或指针。

1)定义游标:定义一个游标名,以及对应的SELECT语句。

 CURSOR cursor_name[(parameter[, parameter]…)] is select_statement;

定义的游标中不能有INTO语句

2)打开游标:就是执行对应的SELECT语句,并且把结果放入工作区,指针指向工作区的首部。

OPEN cursor_name[([parameter => ] value[, [parameter =>] value]…)]

不能重复打开一个游标

3)提取游标数据

检索结果集合中的数据行,放入指定输出变量中。

FETCH cursor_name INTO {variable_list | record_variable}

对该记录进行处理;继续处理直到活动集合中没有记录。

4)关闭游标

释放系统资源。关闭后可以重新open打开。

CLOSE cursor_name;

declare

  --定义游标

  cursor c_cursor is select last_name, salary

         from employees

         where rownum < 11

         order by salary;

  v_name employees.last_name%type;

  v_sal employees.salary%type;

begin

  --打开游标

  open c_cursor;

  --提取游标

  fetch c_cursor into v_name, v_sal;

  while c_cursor %found loop

        dbms_output.put_line(v_name || '---' || v_sal);

        fetch c_cursor into v_name, v_sal;

  end loop;

  --关闭游标

  close c_cursor;

end;

 

游标属性:

%found   布尔属性,当最近一次读取记录成功是返回,值为TRUE;

%notfound  与found相反

%isopen  布尔属性,当游标打开返回TRUE;

%rowcount 数字属性,返回已从游标中读取的记录数。

 

游标for循环语句,可以省略打开、提取、关闭功能。Where current of cursor_name

 

5、异常的处理

三种方式。Java中只有两种,try … catch  和 throws。

三种类型的异常错误:1)预定义错误 2)非预定义错误3)用户定义错误。

EXCEPTION

       WHEN first_exception THEN handler

       WHEN second_exception THEN handler

       WHEN OTHERS THEN handler

1)预定义错误:

ORA-1403  No_data_found  SELECT INTO 没有找到数据

ORA-1422  Too_many_rows  SELECT INTO 返回多行

2)非预定义异常处理

       定义异常情况   <异常情况> EXCEPTION;

       将定义好的异常情况与标准ORACLE错误联系起来

              PRAGMA  EXCEPTION_INIT(<异常情况>,<错误代码>);  

//错误代码号oracle会报出来,就是没有命名

       在异常处理块中对异常进行处理

3)用户自定义异常

       定义异常情况  <异常情况> EXCEPTION;

       RAISE<异常情况>  //抛出异常

       在异常处理块中进行处理

SQLCODE返回错误代码数字

SQLERRM返回错误信息

例如dbms_output.put_line(SQLCODE||’---‘||SQLERRM);

6、存储函数和存储过程

都是函数。存储函数funciton有返回值,存储过程procedure没有返回值return,但是可以有OUT返回参数。

1)创建函数

       建立内嵌函数

       CREAT [OR REPLACE] FUNCTION function_name

              [(argment [{ IN | IN OUT}] Type,

Argment [{IN |  OUT | IN OUT}] Type  )]    //参数列表

                     [ AUTHID DEFINER | CURRENT_USER]  //定义者权限和调用者权限

                     RETURN retrun_type

       {IS | AS}//声明函数使用过程中所需要的变量,类似于declare

              <类型,变量的类型>

       BEGIN

              FUNCTION_body

       EXCETPION

              其它语句

       END;

       注意:IN参数标记表示传递给函数的值在函数执行中不改变;(默认)只有一个返回值

              OUT表示一个值在函数进行计算并通过该参数传递给调用语句;//具有多个返回值

              IN OUT表示函数的值可以变化传递给调用语句

              因为函数需要一个返回值,所以RETURN包含返回结果的数据类型。

--返回给定部门的工资总和、该部门员工总数(定义为OUT类型的参数)

create or replace function get_salary(

      dept_id number,

      emp_count out number)

      return number

is

--函数使用过程中,需要声明的变量和记录类型、游标

      v_sum number(10) := 0;

     

      cursor salary_cursor is select salary from employees

             where department_id = dept_id;

begin

--函数执行体

      emp_count := 0;

      for c in salary_cursor loop

          v_sum := v_sum + c.salary;

          emp_count := emp_count + 1;

      end loop;

      return v_sum;

exception

--异常的处理

      when no_data_found then

           dbms_output.put_line('您需要的数据不存在');

      when others then

           dbms_output.put_line(sqlcode || ':' || sqlerrm);

end;

调用,一共有两个返回值,一个是函数执行结果,一个是v_num    OUT参数。

declare

  v_num number(5) := 0;

begin

  dbms_output.put_line(get_salary(80, v_num));//v_num返回值,返回员工总数

  dbms_output.put_line(v_num);

end;

7、触发器

类似于JavaScript事件函数。触发器在数据库里以独立的对象存储,不能接收参数。

1)触发器分类

       DML触发器。可以在DML操作前后触发。

       替代触发器。由于不能直接对两个以上表所建立的视图进行操作,所以有替代触发器。

       系统触发器。系统事件,比如数据库启动与关闭。

2)触发器组成

       触发器事件。任何情况下触发tigger

       触发器时间。是事件前还是事件后。

       触发器本身。触发器handler。

       触发频率。执行次数。

3)创建触发器

CREATE [OR REPLACE] TRIGGER trigger_name

       {BEFORE | AFTER}

       {INSERT | DELETE | UPDATE [OF column, [column …]]}  //注意没有查找!select

       ON [schema.] table_name

       [FOR EACH ROW]    //说明为  行触发器。

[WHEN condition]  //触发条件

Tigger_body;

行触发器是在DML进行多行操作时,会对每一行都进行触发判断。

语句触发器是将整个语句操作作为触发事件。

4)触发器执行次序

1.执行 BEFORE  语句级触发器;

2.  对与受语句影响的每一行:

     执行 BEFORE  行级触发器

执行 DML 语句

执行 AFTER  行级触发器

3.  执行 AFTER  语句级触发器

        触发器不能有数据库事务控制。

create or replace trigger del_emp_trigger

       before delete on emp for each row

begin

       insert into emp_history

       values(:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno);

end;

posted @ 2017-03-21 13:55  水木仕林  阅读(159)  评论(0编辑  收藏  举报