安装过程当中工具箱类打开为空白,没有任何工具。解决办法:因为IE8不支持工具显示,安装IE9后显示正常。html
Git的.ssh文件利用了RSA非对称加密算法,是利用了数论里的欧拉定理来完成公钥和私钥生成过程。两个质数相乘容易,因式分解困难,因此很是难破解。java
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.htmlgit
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html算法
查看状态git status,添加git add ***,提交git commit –m “message”,检出git checkout --***.sql
http://www.cnblogs.com/52fhy/p/3973887.html 快速上手数据库
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 全面express
1) 默认的表空间(USERS和TEMP),表空间其实是储存的物理结构,能够经过限额来分配表空间的储存大小。不要选SYSTEM做为表空间,由于那是系统储存的表空间,像电脑的C盘同样,别的用户用储存的东西过多,会致使系统的触发器和查询效率下降。数组
2) 概要文件default:主要用来设置用户登陆时间,登陆限制,密码错误限制等配置。服务器
3) 系统权限:主要是对表结构、视图、触发器等高级操做以下图:网络
4) 对象权限:别的用户所创建指定表格的增删改查权限。以下图
5) 角色:系统权限和对象权限的一个集合。能够将角色授予用户,被授予角色的用户会自动拥有角色所具备的权限。若是修改了角色所拥有的权限,则被授予角色的用户的权限也会随之自动修改。
建立新表,删除表,清空表,修改列,改变对象名称
一组逻辑操做单元,是数据从一种状态转变到另一种状态。
1) 一个或多个DML 语句
2) 一个 DDL(Data Definition Language – 数据定义语言) 语句
3) 一个 DCL(Data Control Language – 数据控制语言) 语句
1) 其余用户不能看到当前用户所作的改变,直到当前用户结束事务。
2) DML语句所涉及到的行被锁定, 其余用户不能操做。阻塞
3) 执行 DML 操做的用户能够经过 SELECT 语句查询以前的修正
1) 数据的改变已经被保存到数据库中。改变前的数据已经丢失。全部用户能够看到结果。
2) 锁被释放,其余用户能够操做涉及到的数据。
3) 全部保存点被释放
1) 数据改变被取消。修改前的数据状态被恢复。锁被释放
约束CONSTRAINT:表的强制规定。能够在表级(做用多或一列)、列级(做用一列)定义约束。
1) NOT NULL 非空
2) UNIQUE 惟一
3) PRIMARY KEY 主键 primary key (col)
4) FOREIGN KEY 外键 foreign key (col) references tableName (col2)
5) CHECK 检查 check (col > ***)
存储起来的 SELECT 语句
1) 控制数据访问
2) 简化查询(不用去连表查询,视图已经连表完成)
3) 避免重复访问相同的数据
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
序列SQUENCE:可供多个用户用来产生惟一数值的数据库对象。
1) 自动提供惟一的数值,共享对象
2) 主要用于提供主键值
3) 将序列值装入内存能够提升访问效率
1) 回滚
2) 系统异常
3) 多个表同时使用同一序列
1) 一种独立于表的模式对象,能够存储在与表不一样的磁盘或表空间中
2) 索引被删除或损坏, 不会对表产生影响,其影响的只是查询的速度
3) 索引一旦创建,Oracle 管理系统会对其进行自动维护,并且由 Oracle 管理系统决定什么时候使用索引。用户不用在查询语句中指定使用哪一个索引
4) 在删除一个表时,全部基于该表的索引会自动被删除
5) 经过指针加速 Oracle 服务器的查询速度
6) 经过快速定位数据的方法,减小磁盘 I/O
1) 列中数据值分布范围很广
2) 列常常在 WHERE 子句或链接条件中出现
3) 表常常被访问并且数据量很大 ,访问的数据大概占数据总量的2%到4%
1) 方便访问其它用户的对象
2) 缩短对象名字的长度
3) 建立同义词CREATE SYNONYM e FOR employees;使用同义词select * from e;
用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];
将多个查询用 SET 操做符链接组成一个新的查询
UNION/UNION ALL 去重/不去重
INTERSECT 交集
MINUS 差集
好比:注意,列要一一对应。
SELECT employee_id, job_id
FROM employees
UNION
SELECT employee_id, job_id
FROM job_history;
待补充。周末学习。
PL/SQL是一种高级数据库程序设计语言,该语言专门用于在各类环境下对ORACLE 数据库进行访问。因为该语言 集成于数据库服务器中, 因此PL/SQL 代码能够对数据进行快速高效的处理。
PL/SQL由三个块组成:声明、执行、异常。块结构以下:
DECLARE
/* 声明部分 : 在此声明 PL/SQL 用到的变量 , 类型及游标,以及局部的存储过程和函数 */
BEGIN
/* 执行部分 : 过程及 SQL 语句 , 即程序的主要部分 */
EXCEPTION
/* 执行异常部分 : 错误处理 */
END;
其中 执行部分是必须的。
Plsql Dev中须要设置set serveroutput on;不然看不到程序输出结果。
PLSQL块主要有三类:
1)无名块,动态构造,只执行一次。2)子程序,存储在数据库中的存储过程、函数和包。当数据库创建好后,能够在其它程序中调用它们。3)触发器,当数据库发生一些操做时,会自动调用它们。
B/S架构中,瓶颈是网络IO,进行大量的数据交换会下降传输效率。利用PLSQL将数据处理放在服务器中进行,会省去了数据在网络中交换的时间。
PLSQL也能够嵌套在客户端工具中,方便使用。
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;
条件判断(两种)
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
相似于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
三种方式。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);
都是函数。存储函数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;
相似于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;