Oracle命令集

一.系統權限管理:

使用sys登陸:    sqlplus / as sysdba;
啓動默認監聽:    lsnrctl start;
啓動指定監聽:    lsnrctl start [監聽名] ;
啓動oracl實例:    oradim -starup -sid orcl,net start OracleServiceORCL;    //oradim -starup -sid (數據庫實例的sid);

二.對象權限:

賦予權限時,可同時賦予給該用戶多個權限,權限之間用","隔開;

系統權限:

創建用戶及密碼:    create user (用戶名) identified by (密碼);  //剛創建好的用戶是沒有任何權限的,必須得用sys用戶賦給一定的權限才能使用;
賦予用戶對話的權限:   grant create session to (用戶名);   //只有會話權限;
賦予用戶創建表的權限:   grant create table to (用戶名);    //可以創建表,但是沒有存放表空間的權限;
賦予用戶使用表空間的權限:  grant unlimited tablespace to (用戶名);   //不受上限的表空間權限; 至此可以創建一個正常的表;
所有權限:    grant all to (用戶名)[public];    //賦予所有權限給(指定用戶)[所有用戶];


刪除權限:    revoke create table from (用戶名):   //revoke (相關權限) from (用戶名):撤銷該用戶相關權限;

查看用戶權限:
    
用戶系統權限:    select * from user_sys_privs;    //當前用戶系統權限表;
用戶對象權限:    select * from user_tab_privs;    //當前用戶對象權限表;

對象權限:對於表而言,限定該表的訪問權限;未經授權的用戶不可訪問該用戶所屬的表;最高權限的sys可以訪問所有權限的用戶表;

授權給某用戶查看指定表的權限:  grant select on (表名) to (用戶名);
授權給某用戶修改指定表的權限:  grant insert on (表名) to (用戶名);
授權給某用戶指定表的所有權限:  grant all on (表名) to (用戶名);

授權給某用戶指定表的指定列的權限: grant (權限) on (表名) to (用戶名);   //例子:grant update(name) on testTable to user_1;授權給user_1更新表名爲testTable的權限(僅限於更新和插入);(貌似有點過於BT了)

查看某個用戶的指定表的內容:  select (內容) from (用戶名).(表名);
在某個用戶的指定表內插入內容:  insert into (用戶名).(表名) (列1 類型,列2 類型,列3 類型...);

誰擁有該表,誰就可以給其它的用戶授權;

 

//grant create session to (用戶名);


三.表的操作;
創建序列:    create sequence StudentPKSequence start with  1 increament by 1;
取序列的當前值;   select StudentPKSequence.currVal from dure;
創建一個表:    create table (表名) (列1 類型,列2 類型,列3 類型...); //數字爲int型,字符爲char(長度);
在表中插入一行數據:   insert into (表名) values(列1 值,列2 值,列3 值...); //列的值對應表的列值類型;
在表中插入一列數據:   alter table(表名) add (列名2 類型,列名3 類型...); //數字爲int型,字符爲char(長度);
提交保存文件:    commit;       //如果未提交,數據是不會保存到表中的;
刪除表:     drop table (表名);     //一個用戶有創建表的權限,就有增/刪/改/查該表的權限;
從指定文件中運行sqlplus命令:  start (filename);     //注意文件後綴名;
增/刪/改之後必須要提交更改;

角色是權限的集合;對象權限是用戶之間表的訪問權限;

事務:

安全點: savepoint (安全點名稱);  //安全點可以有多個;
回滾: rollback[安全點名稱];  //回滾到已經設定的安全點;

Oracle中的函數;

顯示系統日期:(日期轉字符串)

select to_char(sysdate,'yyyy"年"-mm-dd hh24:mi:ss') from dual;

select to_char(sysdate,'yyyy"年"-mm-dd hh24:mi:ss')"現在時間是:" from dual


(字符串轉日期)
inster into emp values (0884,'aa','aa',1234,to_date('2008-12-10 13:22:33','yyyy-mm-dd hh24:mi:ss'),'','');

sys  網絡管理員
system  普通管理員
scott   普通用戶

commit rollback
oracle中
只有增刪改查 是手動提交。
其他是自動提交。


查詢部分用rownum,但是rownum不支持大於和大於等於,只支持小於和小於等於。
select count(*) from emp where rownum<=20;
select count(*) from emp where rownum<=20;

insert into emp values (8005,'aa','aa',7369, to_date('2008-12-10 12:23:13','yyyy-mm-dd hh24:mi:ss'),'1000','20',null);
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

update emp set sum=(sal+nvl(comm,0));

insert into dept values(21,'aa','null');
insert into dept values(21,'aa',null);
insert into dept (deptno,dname) values(12,'itcast');

update dept set dname='itcast+++' where deptno<30;

delete from emp where empno<900;

create table temp as select deptno,dname from dept;

update (select dname from dept) tab set tab.dname='--';
update dept set (dname,loc) = (select ename,job from emp where empno = 7369) where deptno=41;
=============================================================================================================================================================
表的導入和導出:
導入imp;導出exp;

夫妻:一對一關係;
倉庫與產品:一對多關係;
學生與課程:多對多關係;

start nomount 僅僅啓動列程
alter database mount裝載數據庫
    select * from v$database;可以查看數據庫信息。
alter database archivelog 歸檔數據庫 ; 不歸檔就是noarchivelog
archivelog log list;
alter database open;打開數據庫;

linux或unit下分步驟啓動數據庫

lsnrctl start (啓動監聽)
sqlplus / as sysdba (用sys用戶連接數據庫)
startup nomount;     (打開例程)
alter database mount;  (裝載數據庫)
alter database open;    (打開數據庫)

window 系統下分步驟啓動數據庫

lsnrctl start 
oradim -startup -sid orcl (window比較特殊,要先啓動服務再用shutdown 關閉,才能分步驟啓動)
shutdown;
startup nomount;
alter database mount;
alter database open;
=============================================================================================================================================================
Where和Having的區別:
1.分組前,不能使用聚合函數
2.分組後,使用聚合函數.
事務和SQL函數:
只有增/刪/改才需要提交;
可以設置默認提交:
Set autocommit on;打開默認提交;
Set autoeommit off;關閉默認提交;
打開默認提交後,對數據庫進行增/刪/改後,數據庫會自動幫用戶提交該文件的操作;
獲得當前時間: select sysdate from dual;
虛擬表:dual;
BLOB,CLOB用來存放大型數據;用來存放電話或是圖片數據;
BLOB,存放二進制文件.CLOB用來存放(文本)字符文件.最大上限4G;
一般不會直接把文件放進數據庫裏,再用流讀出來.常用方法是把路徑寫進表中.然後讀出來,找到相關路徑下去;
=============================================================================================================================================================
數據類型
number(p,s)
char(n) nchar(n) varchar(n) nvarchar(n) varchar2(n) nvarchar2(n)
date   
blob clob nclob
主鍵約束:create table demo(id int constraint demo_pk primary key,name varchar(10));  特點:不能爲空;
   create table demo(id int,name varchar(10),constraint demo_PK primary key(id));
外鍵約束: 1 插入數據的時候外鍵的值必須在對應的主鍵中可以找到,或插入null
   2 刪除數據的時候,必先刪除外鍵,再刪除主鍵。
 create table employees(
      id int,
     name varchar(10),
      deptno int,
     foreign key(deptno) references dept(deptno)
    )

 create table employees1(
      id int,
      name varchar(10),
      deptno int  references dept(deptno)
   )


唯一約束: create table demo1 (id int ,name varchar(10),primary key (id),unique(name)); (可以爲null)
   create table demo2 (id int ,name varchar(10) unique,primary key (id));
非空約束:create table demo(id int.name varchar(10) not null);
默認約束:create table demo(id int,name varchar(10)  default 'lise');name默認的是李四;
check約束:create table demo(id int,name varchar(10) default 'lisi' not null,age int check (age>0 and age<150));
查詢約束:desc user_constraints(描述當前用戶下的約束條件)

修改表:
添加列:alter table demo add adress cjar(10);
刪除列:alter table demo drop column address;
刪除主鍵約束:alter table demo drop constraints PK_demo;
修改列的類型:alter table demo modify name char(20);
  SQL> alter table demo2 add constraint PK_demo2 primary key (id);
  表已更改。
  SQL> alter table demo2 drop constraints PK_demo2;
        alter table demo2 add primary key (id);
=============================================================================================================================================================
www.sqlzoo.cn.
連接分類:
內連接:主外鍵都能對應上才能聯合起來。select * from dept inner join emp on dept.deptno=emp.deptno
外連接:
 左外連接:以左邊表爲主select * form emp,dept where emp.deptno=dept.deptno(+);
         select * from emp left outer join dept on emp.deptno=dept.deptno ;

 又外連接:以右邊表爲主select * form emp,dept where emp.deptno(+)=dept.deptno;
         select * from emp rigth outer join dept on emp.deptno=dept.deptno ;
 完全外連接:select * from emp full outer join dept on
交叉連接:select * from emp,dept;(沒有意義的查詢)emp20,dept10,總共200行
子查詢:
 相關子查詢:select * from emp e where sal> (select avg(sal) from emp e1 where e1.deptno=e.deptno);括號裏的查詢不能單獨查詢。
 嵌套子查詢:select danme from dept where deptno=(select deptno from demp where ename='SMITH');(子查詢是可以單獨執行查詢的)

三範式:就是三個原則,
1.在列裏是單值,不能爲雙值。
2.表裏的每列要完全依賴於主鍵,而不能部分依賴。
3.不允許依賴傳遞。

=============================================================================================================================================================
PL/SQL面向過程的語言:(銀行裏有可能用到)
1.
begin
   null;
end;
2.
begin
dbms_output.put_line('hello world');(line相當於回車換行)
end;
3.========================================================set serveroutput on(打開服務器段的輸出打開);
4.declare 
   id int;(變量的聲明)
 beign
  id:5;
  dbms_output.put_line(id);
 end;
5.
declare
id int:=4;
name varchar2(10);(查詢副值)
begin
select ename into name from emp where empno=7369;
dbms_output.put_line(name);
end;
6.
declare
id int:=4;
name emp.ename%type;(定義的列類型聲明變量)
begin
select ename into name from emp where empno=7369;
dbms_output.put_line(name);
end;
7.
declare
 id int:=7369;
 emprow emp%rowtype;(行級變量的副值)
begin      (不能寫查詢語句)
 select * into emprow from emp where empno=id;
 dbms_output.put_line(emprow.ename||'--->'||emprow.job);
end;
8.
declare
 id int:=&請輸入id;(用戶輸入的值)
 emprow emp%rowtypw;
begin
 select * into emprow from emp where empno=id;
 dbms_output.put_line(emprow.ename||'--->'||emprow.job);
end;

10.
寫個完整的:
declare
 id int:=&id;
 myrow emp%rowtype;
begin
 select * into myrow from emp  where empno<id;
 dbms_output.put_line(myrow.empno||--->||myrow.ename);
EXCEPTION
 when to_many_rows then
 dbms_output.put_line('toooooooooooooo  many!!!');
 when no_data_found then
 dbms_output.put_line('noooooooooooooo data!!!!!');
 when others then
 dbms_output.put_line('error');
end;
循環:四種
==========================loop循環:
declare
 id int:=1;
begin
 loop
  id:=id+1;
  dbms_output.put_line(id);
exit when
 id=20;
 end loop;
end;
==========================while循環:

declare
 id int:=1;
begin
 while(id<20) 
 loop
  id:=id+2;
  dbms_output_line(id);
 end loop;
end;
===========================for循環:
begin
 for i in 2..10
 loop
  dbms_output.put_line(i);
 end loop;
end;
===========================for控制反轉循環,倒敘循環;
begin
 for i in reverse 1..10   (控制反轉;倒敘的)
 loop
  dbms_output.put_line(i);
 end loop;
end;

條件:
declare
 id int:=0;
begin
 if(id=0) then
  dbms_output.put_line('id=0');
 else
  dbms_output.put_line('id<>0');
 end if
end;

declare
 id int:=0;
begin
 if(id=0) then
  dbms_output.put_line('id=0');
 elsif(id=1)
  dbms_output.put_line('id=1');
 elsif(id=2)
  dbms_output.put_line('id=2');
 else
  null;(如果不寫輸出語句會包錯)
 end if
end;
===================================================
存儲過程:
定義變量 declare
賦值 :=  &    select .. into...   (兩種類型異常)
循環 loop  while for
分支 if   if  elsif  case
pl/sql中不能寫查詢

存儲過程---函數(return)
存儲過程:
格式(形參 in out in out 不寫精度)  as/is
調用  exec pl/sql
事務
=>
====================================================
如何調用存儲過程:在sqlplus裏調用:他可以寫增,刪,改,不能寫查詢語句。而這些對數據改動的需要對事物提交;
1.execute 存儲名( 裏面的參數默認爲向裏傳,如果寫一個out是向外傳);
        存儲過程的參數可以向裏傳值,可向外傳值,也可向裏向外傳值;  
 create or replace produre mypro(id int,name out varchar)
 as
 begin
  select dname into name from dept where deptno=id;
 end;
2.PL/SQL 代碼快調用;(調用上面的存儲過程向外傳參數的列子)
 declare
  name varchar(10);
  id int:=10;
 begin
 mypro(id,name);
  dbms_output>put_line(name);
 end;
字段=>'beijing'把beijing強制賦值給字段。
查詢用戶有什麼存儲過程:
=====================》select  * from user_source(代表原代碼);
存儲過程放在什麼地方?

客戶端的工具裏面查看,原程序,過程,中有存儲過程名。


函數:
return
調用函數:sql pl/sql
 create or replace procedure myproc(id int)as
  name dept.dname%type;
 begin
  select danme into name from dept;
  dbms_output.put_line(name);
 end;

有兩中調用方式:1.代碼塊2.sql語句調用
1.
 create or replace function myfun(name varchar2)return varchar2 is(as)
  i int;
 begin
  select count(*) into i from emp where ename=name;
 return(i);
 end myfun;

調用:
1.select myfun('smith') from dual(默認序列表);(sql調用)
2.declare(代碼塊調用)
 i int;
  begin
 i:=myfun('smith');
 dbms_output.put_line(i);
  end;

控制事物:pragma autonomous_transactions;
查看錯誤信息:
show errors;
desc user_errors;
select * from user_errors;

認真練習java程序調用存儲過程和函數:
============================================================================================================================================================
         mysql
mysqld --console -uroot -proot -hlocalhost
mysql -uroot -proot -hlocalhost
show databases;顯示所有數據庫
use mysql;進如你選者的數據庫
show tables;顯示所有表
create database chenhu創建數據庫;
use chenhu;進如數據庫
修改數據庫裏的編碼,在目錄下
對my.ini進行修改;

導表:
mysqldump -uroot -proot test >d:/test.sql導出腳本
mysql -uroot -proot
help
先導入表的時候要在腳本里加上:
create databases 數據庫名
use 數據庫名
然後執行==>source (執行腳本與/.) d:/test.sql

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章