&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
內容包括三大項:
1.oracle基本操做語句java
2.SQLServer基本操做語句sql
3.各類數據庫鏈接方法
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
**************************************************oracle基本操做語句********************************************************
打開服務器
net start oracleservice
打開監聽器
lsnrctl start
關閉服務器
net stop oracleservicebinbo
關閉監聽器
lsnrctl stop
===============================================================
清屏
****************************************************************
數據字典 ===========desc user_views(關鍵詞)
****************************************************************
===============================================================
查看當前用戶的角色
SQL>select * from user_role_privs;
===============================================================
查看當前用戶的系統權限和表級權限
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;
===============================================================
查看當前用戶的缺省表空間
SQL>select username,default_tablespace from user_users;
===============================================================
換用戶
conn as sysdba
sys
tsinghua
sqlplus "sys/tsinghua as sysdba"
conn sys/zl as sysdba
===============================================================
修改表結構
alter table test modify(name not null);
alter table test add(name varchar2(20));
alter table test drop column sex;
alter table test set unused column sex;
alter table test drop unused columns;
===============================================================
更改用戶密碼
sql>alter user 管理員 identified by 密碼;
===============================================================
建立表空間的數據文件
sql>create tablespace test datafile 'd:\oracle\binbo.dbf' size 10m;
===============================================================
建立用戶
sql>create user 用戶名 identified by 用戶名;
===============================================================
bfile類型實例
建立目錄
create directory tnpdir as 'c:\';
刪除目錄
drop directory tnpdir
受權
crant read on directory tn pdir to scott;
建表
create table bfiletest(id number(3), fname bfile);
添加數據
insert into bfiletest values(1,bfilename('TMPDIR','tmptest.java'));
===============================================================
查看用戶
sql>show user
===============================================================
檢查語句是否有錯
show error
===============================================================
鎖定用戶
sql>alter user 用戶名 account lock
===============================================================
解除用戶
sql>alter user 用戶名 account unlock
===============================================================
刪除用戶
sql>drop user zl;
===============================================================
給用戶建立表權限
sql>grant create table to 用戶名;
===============================================================
授管理員權限
sql>grant dba to 用戶名;
===============================================================
給用戶登陸權限
sql>grant connect to 用戶名
===============================================================
給用戶無限表空間權限
sql>grant unlinmited tablespace to 用戶名;
===============================================================
收回權限
sql>revoke dba from 用戶名;
===============================================================
查看用戶下全部的表
SQL>select * from user_tables;
===============================================================
查看名稱包含log字符的表
SQL>select object_name,object_id from user_objects
where instr(object_name,'LOG')>0;
===============================================================
查看某表的建立時間
SQL>select object_name,created from user_objects where object_name=upper('&table_name');
===============================================================
查看某表的大小
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&table_name');
===============================================================
查看放在ORACLE的內存區裏的表
SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;數據庫
===============================================================緩存
再添加一個表空間的數據文件
sql>alter tablespace test add datafile 'd:\oracle\test1.dbf' size 10m;
===============================================================
建表 SQL>create table studen(stuno int,stuname varchar(8) not null,stubirth date default to_date('1987-5-9','YYYY-MM-DD'));
向表結構中加入一列 SQL>alter table studen add(stuphoto varchar(9));
從表結構中刪除一列 SQL>alter table studen drop column stuphoto;
修改表一列的長度 SQL>alter table studen modify(stuno number(4));
隱藏將要刪除的一列 SQL>alter table studen set unused column stuphoto;
刪除隱藏的列 SQL>alter table studen drop unused columns;
向表中加入約束 SQL>alter table studen add constraint pk primary key(stuno);
刪除約束 SQL>alter table studen drop constraint pk;
===============================================================
建立表服務器
sql>create table 用戶名(name varchar2(20),password varchar(20)) tablespace 空間名;
===============================================================
添加字段
sql>alter table test add(column_x char(10) not null);
===============================================================
更改字段
sql>alter table emp modify(column_x char (20));
===============================================================
刪除字段
如待刪除域屬於某個索引,則不容許刪除操做,必須將此域先設置爲NULL。
sql>alter table emp modify(column_x null);
sql>update emp set column_x=null;
sql>commit;
sql>alter table emp drop(column_x);
===============================================================
選擇表空間
sql>alter user 用戶名 default tablespace test;
===============================================================
管理員刪除別的用戶中的表
sql>drop table 用戶名.表名;
===============================================================
退出
sql>exit;
===============================================================
默認進入
sql>sqlplus "/ as sysdba"
===============================================================
查看數據庫
sql>show parameter block;
===============================================================
寫大量語句用記事本,新建方式。
輸入"ed"回車
保存後
輸入"/"運行;
===============================================================
查詢用戶有多少表
sql>select * from tab;
===============================================================
SQLServer取時間
sql>select getdate
oracle 取時間
sql>sysdate;
===============================================================
操做表結構數據庫定義語言命令
(不記錄在日誌文件中)
create table建表
sql>create table test(name varchar2(20),age date,sex char(2));
sql>insert into test(name,age,sex) values('aa',sysdate,'男');
sql>insert into test(name,age,sex) values('bb',to_date('1888-8-8',"yyyy-aa-dd hh24:mi:ss"),'男');
sql>select * from test;
===============================================================
查詢男和女總數
sql>select sex,count(sex) from test group by sex;
---------------------------------------------------------------
test表中數據輸入test1表中
SQLSserver---select * into test1 from test;
oracle---create table test1 as select * from test;
---------------------------------------------------------------
更改會話時間
sql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
---------------------------------------------------------------
sql>show parameter block 表和視圖
sql>show parameter date 查數據結構
---------------------------------------------------------------
SQLServer中
--刪除表中相同數據
sql>create table test1 as select distinct * from test;
--刪除表數據
sql>truncate table test;
--把test中數據輸入到test1中
sql>insert into test(select * from test1);
---------------------------------------------------------------
rowid(表中存儲地址至關表id)和rownum(表序號)稱僞列(用法)
sql>select name,age,sex,rowid,rownum from test1;
查出前三行
sql>select * from test where rownum<=3;
查出後三行
sql>select * from (select name n,age a,sex s,rownum r from test) where r>(select count(*) from test)-3;
刪除後三行
SQL> delete from test where name not in(select name from test where rownum<=(select count(*) from test)-3);
刪除相同行
sql>delete from test where rowid not in(select max(rowid) from test group by name,age,sex);
刪除全部表
sql>select 'drop table' ||tname|| ':' from tab;
sql>spool c:\test.sql;
sql>select 'drop table' ||tname|| ':' from tab;
sql>spool off
sql>@c :\test.sql;
---------------------------------------------------------------
alter table修改表
truncate table節段表(只刪除數據)
drop table刪除表
===============================================================
查看錶結構
desc 表名;
===============================================================
查出成績的前三名
sql>select * from (select * from stu order by score desc) where rownum<=3;
===============================================================
更改字符集
SQL>startup mount
SQL>alter system enable restricted session;
SQL>alter system set job_queue_processes=0;
SQL>alter database open;
SQL>alter database character set ZHS16GBK;
SQL>shutdown
SQL>startup
===============================================================
將一張表或幾張表中的域從新組合後插入新表。
假定原先的兩張表爲emp,work,現選擇部分數據域合併爲emp_work
創建emp_work
SQL>insert into emp_new select a.no, sysdate, a.name, b.service_duration from emp a, work b where a.no=b.no;
SQL>commit;
這樣的方式仍然要使用回滾段,爲加快數據遷移速度,可將insert替換成insert /*+APPEND*/(大小寫不論),指示oracle以直通方式直接寫數據文件,繞過回滾空間。
SQL>insert /*+APPEND*/ into emp_new select a.no, sysdate, a.name, b.service_duration from emp a, work b where a.no=b.no;
SQL>commit;
===============================================================
DDL數據定義語言(create,alter,drop)
DML數據操縱語言(insert,select,delete,update)
TCL事務控制語言(commit,savepoint,rollback)
DCL數據控制語言(GRANT REVOKE)
===============================================================session
一個表中的某一列輸到另外一個表中
insert into stu1(name)(select name from stu);
===============================================================
事務
rollback;
insert into stu1(name)(select name from stu);
commit;提交
===============================================================
COMMIT - 提交併結束事務處理
ROLLBACK - 撤銷事務中已完成的工做
SAVEPOINT – 標記事務中能夠回滾的點
SQL> update order_master set del_date ='30-8月-05' WHERE orderno <= 'o002';
SQL> savepoint mark1;
SQL> delete FROM order_master WHERE orderno = 'o002';
SQL> savepoint mark2;
SQL> rollback TO SAVEPOINT mark1;
SQL> COMMIT;
===============================================================
換名
set sqlprompt "scott>";
===============================================================
GRANT 授予權限
SQL> GRANT SELECT ON vendor_master TO accounts WITH GRANT OPTION;
REVOKE 撤銷已授予的權限
SQL> REVOKE SELECT, UPDATE ON order_master FROM MARTIN;
===============================================================
比較操做符
SQL> SELECT vencode,venname,tel_no
FROM vendor_master
WHERE venname LIKE 'j___s';
SQL> SELECT orderno FROM order_master
WHERE del_date IN (‘06-1月-05’,‘05-2月-05');
SQL> SELECT itemdesc, re_level
FROM itemfile
WHERE qty_hand < max_level/2;
===============================================================
邏輯操做符
SQL> SELECT * FROM order_master
WHERE odate > ‘10-5月-05'
AND del_date < ‘26-5月-05’;
===============================================================
集合操做符將兩個查詢的結果組合成一個結果
SQL> SELECT orderno FROM order_master
MINUS
SELECT orderno FROM order_detail;
-----------------------------------------------------------------
select * from scott.stu
union (all)重複的去掉[intersect把相同的取出來][minus顯示不相同的數]
select * from stu
-----------------------------------------------------------------
顯示相同的數據
select name from stu intersect select name from stu1;
===============================================================
鏈接操做符
鏈接操做符用於將多個字符串或數據值合併成一個字符串
SQL> SELECT (venname|| ' 的地址是 '
||venadd1||' '||venadd2 ||' '||venadd3) address
FROM vendor_master WHERE vencode='V001';
===============================================================
操做符的優先級
SQL 操做符的優先級從高到低的順序是:
算術操做符 --------最高優先級
鏈接操做符
比較操做符
NOT 邏輯操做符
AND 邏輯操做符
OR 邏輯操做符 --------最低優先級數據結構
===============================================================
用來轉換空值的函數
NVL
NVL2
NULLIF
SELECT itemdesc, NVL(re_level,0) FROM itemfile;
SELECT itemdesc, NVL2(re_level,re_level,max_level) FROM itemfile;
SELECT itemdesc, NULLIF(re_level,max_level) FROM itemfile;
===============================================================
GROUP BY和HAVING子句oracle
GROUP BY子句
用於將信息劃分爲更小的組
每一組行返回針對該組的單個結果less
HAVING子句
用於指定 GROUP BY 子句檢索行的條件ide
SELECT p_category, MAX(itemrate) FROM itemfile GROUP BY p_category;
SELECT p_category, MAX(itemrate) FROM itemfile GROUP BY p_category HAVING p_category NOT IN ('accessories');
===============================================================
ROW_NUMBER (row_number)返回連續的排位,不論值是否相等
RANK(rank) 具備相等值的行排位相同,序數隨後跳躍
DENSE_RANK(dense_rank) 具備相等值的行排位相同,序號是連續的
SELECT d.dname, e.ename, e.sal, DENSE_RANK()
OVER (PARTITION BY e.deptno ORDER BY e.sal DESC)
AS DENRANK
FROM emp e, dept d WHERE e.deptno = d.deptno;
===============================================================
日期函數
ADD_MONTHS(當前只加月)
alter session set nls_date_format='yyyymmdd hh24miss';
select add_months(sysdate,2) from dual;
----------------------------------------------------------------
MONTHS_BETWEEN(前面時間減後面時間=得之間月差)
select months_between(sysdate,to_date('2007-6-10','yyyy-mm-dd')) from dual;
----------------------------------------------------------------
LAST_DAY(求得當前月的最後一天)
select last_day(sysdate) from dual;
----------------------------------------------------------------
ROUND(round年-月-日-->四捨五入)
select round(2.3) from dual;
select round(to_date('2007-6-10','yyyy-mm-dd'),'year') from dual;
select round(to_date('2007-6-10','yyyy-mm-dd'),'month') from dual;
select round(to_date('2007-6-10','yyyy-mm-dd'),'day') from dual;
----------------------------------------------------------------
NEXT_DAY(下一星期的星期二)
select next_day(to_date('2007-6-10','yyyy-mm-dd'),'星期二') from dual;
----------------------------------------------------------------
TRUNC(trunc)
----------------------------------------------------------------
EXTRACT(extract)
select extract(year from date '1998-03-07') from dual;
select extract(month from to_date ('1998-03-07','yyyy-mm-dd')) from dual;
----------------------------------------------------------------
2008年2月有多少天
inbo---->select extract(day from last_day(to_date ('2008-02-07','yyyy-mm-dd'))) from dual;
----------------------------------------------------------------
2003-4-3與1956-3-1之間有多少天
inbo---->select round(months_between(to_date('2003-4-3','yyyy-mm-dd'),to_date('1956-3-1','yyyy-mm-dd'))/12) from dual;
===============================================================
把兩邊的9去掉
select trim('9' from '9999ddddddd99999') from dual;
去空格
select trim(' ' from ' 9999ddddddd99999') from dual;
===============================================================
函數 輸入 輸出
Initcap(char) Select initcap(‘hello’) from dual; Hello
Lower(char) Select lower(‘FUN’) from dual; fun
Upper(char) Select upper(‘sun’) from dual; SUN
Ltrim(char,set) Select ltrim( ‘xyzadams’,’xyz’) from dual; adams
Rtrim(char,set) Select rtrim(‘xyzadams’,’ams’) from dual; xyzad
Translate(char, from, to) Select translate(‘jack’,’j’ ,’b’) from dual; back
Replace(char,searchstring,[rep string]) Select replace(‘jack and jue’ ,’j’,’bl’) from dual; black and blue
Instr (char, m, n) Select instr (‘worldwide’,’d’) from dual; 5
Substr (char, m, n) Select substr(‘abcdefg’,3,2) from dual; cd
Concat (expr1, expr2) Select concat (‘Hello’,’ world’) from dual; Hello world
===============================================================
數字函數接受數字輸入並返回數值結果
函數 輸入 輸出
Abs(n) Select abs(-15) from dual; 15
Ceil(n) Select ceil(44.778) from dual; 45
Cos(n) Select cos(180) from dual; -.5984601
Cosh(n) Select cosh(0) from dual; 1
Floor(n) Select floor(100.2) from dual; 100
Power(m,n) Select power(4,2) from dual; 16
Mod(m,n) Select mod(10,3) from dual; 1
Round(m,n) Select round(100.256,2) from dual; 100.26
Trunc(m,n) Select trunc(100.256,2) from dual; 100.25
Sqrt(n) Select sqrt(4) from dual; 2
Sign(n) Select sign(-30) from dual; -1
===============================================================
字符函數
查看有多少個字符
SQL> SELECT LENGTH('frances') FROM dual;
-----------------------------------------------------------------
SQL> SELECT vencode,
DECODE(venname,'frances','Francis') name
FROM vendor_master WHERE vencode='v001';
-----------------------------------------------------------------
查找人是否存在 加字段decode主明是否有人
select name,decode(name,'rbb','有人') from stu;
===================================================================
排續
select dense_rank() over(partition by sex order by score) from test;
select row_number() over(order by score),name,sex,score from test;
select rank() over(order by score) from test;
select dense_rank() over(order by score) from test;
==========================================================================
建立同義詞
SQL> create public synonym test for rbb.test;
SQL> create synonym test for mytest;
同一類的才能夠替換,同義詞替換同義詞
替換
SQL> create or replace synonym emp_sysn for scott.emp;
**********************************************************************************************
建立序列
SQL>create sequence xule increment by 1 start with 1 maxvalue 999;
increment by 增加值
start with 起始值
maxvalue 最大值
minvalue 最小值
nocycle 不循環
chare 10緩存
xule.nextval ===========下一個序列的值
xule.currval ===========能夠查詢序列當前的值
更改序列 start with 不能改
alter sequence xule maxvalue 100 [sycle nocycle];
**********************************************************************************************
序列用法
SQL>create table xl(name varchar2(4));
SQL>insert into test values(xule.nextval);
SQL>select xl.currval from dual;
**********************************************************************************************
刪除序列
drop sequence x;
desc user_sequences
**********************************************************************************************
建立視圖 視圖中可使用函數和表達式
create or replace view
**********************************************************************************************
建立視圖
SQL> create or replace view 視圖名 as select * from rbb union all select * from rbbb union all select * from test;
SQL> create or replace view 視圖名 as
2 select empno as 編號,ename as 姓名 from scott.emp
3 where deptno=10;
==========================================================================
若是在當前用戶下沒有這個視圖就建立此視圖
若是有此視圖就覆蓋此視圖
create or replace view view_name as select empno,ename from emp where deptno=10;
**********************************************************************************************
在建立視圖前要爲當前用戶受權
grant resource to scott;
create or replace view v_sal as select ename,sal from emp order by sal desc;
**********************************************************************************************
使用視圖
select * from v_sal;
**********************************************************************************************
刪除一個視圖
drop view view_name;
**********************************************************************************************
從新編譯已有的視圖
alter view view_name compile;
**********************************************************************************************
數據字典 ===========desc user_views
**********************************************************************************************
經常使用的轉換函數有
TO_CHAR
SELECT TO_CHAR(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS') FROM dual;
TO_DATE
SELECT TO_DATE('2005-12-06', 'yyyy-mm-dd') FROM dual;
TO_NUMBER
SELECT TO_NUMBER('100') FROM dual;
**********************************************************************************************
集合操做符
union all 鏈接兩個表或者多個表爲一個視圖
MINUS 操做符返回從第一個查詢結果中排除第二個查
詢中出現的行。
INTERSECT 操做符只返回兩個查詢的公共行。
**********************************************************************************************
鎖定的優勢
1.一致性 - 一次只容許一個用戶修改數據
2.完整性 - 爲全部用戶提供正確的數據。若是一個用戶進行了修改並保存,所作的修改將反映給全部用戶
3.並行性 -容許多個用戶訪問同一數據
行級鎖和表級鎖
行級鎖:是一種排他鎖,防止其餘事務修改此行.
解鎖:提交事務(commit),(rollback)
---------------------------------------------------------------
更新表數據:update test set score=80 where name='xiaoli';
--------------------------------------------------------------
自動提交
set autocommit on
set sutocommit off
------------------------------------------------------------
鎖定某行更新語句
select * from scott.test where name='xiaoli' for update;
SELECT * FROM order_master WHERE vencode='V002' FOR UPDATE OF odate,del_date;
select * from scott.test where name='xiaoli' for update of score;
select * from scott.test atest,test b where a.name=b.name and b.name='bbb' for update of b.score;
--------------------------------------------------------------------
等待update
select * from scott.test where name='xiaoli' for update wait 2;
select * from scott.test where name='xiaoli' for update nowait;
-------------------------------------------------------------------
表級鎖:鎖定整個表
表級鎖語法:lock table 表名 in mode mode;
-------------------------------------------------------------------------
行共享row share--行排他row exclusive--共享share-共享行排他share row exclusive-----排他exclusive
---------------------------------------------------------------------------------
行共享(row share):lock table scott.test in (row share) mode;
[其餘用戶.行共享---其餘用戶.行排他---其餘用戶.共享----其餘用戶.共享行排他----其餘用戶.不能夠(排他)]
--------------------------------------------------------------------------------
行排他(row exclusive):lock table scott.test in (row exclusive) mode;
[其餘用戶.行共享----其餘用戶.行排他----其餘用戶.不能夠(共享)---其餘用戶.不能夠(共享行排他)--其餘用戶.不能夠(排他)]
---------------------------------------------------------------------------------
共享(share):lock table scott.test in (share) mode;
[其餘用戶.行共享---其餘用戶.不能夠(行排他)---其餘用戶.共享----其餘用戶.不能夠(共享行排他)---其餘用戶.不能夠(排他)]
-----------------------------------------------------------------------------------
共享行排他(share row exclusive):lock table scott.test in (share row exclusive) mode;
[其餘用戶.行共享,其餘用戶.不能夠(行排他),其餘用戶.不能夠(共享),其餘用戶.不能夠(共享行排他),其餘用戶.不能夠(排他)]
--------------------------------------------------------------------------------------
排他(exclusive):lock table scott.test in (exclusive) mode;
[其餘用戶.不能夠(行共享),其餘用戶.不能夠(行排他),其餘用戶.不能夠(共享),其餘用戶.不能夠(共享行排他,)其餘用戶.不能夠(排他)]
----------------------------------------------------------------------------------
死鎖
當兩個事務相互等待對方釋放資源時,就會造成死鎖
Oracle會自動檢測死鎖,並經過結束其中的一個事務來解決死鎖
----------------------------------------------------------------------------------
表分區
---範圍分區
create table test(name varchar2(20),sex char(2),score number(3))
partition by range(score)
(
partition p1 values less than (50) tablespace users,
partition p2 values less than (80),
partitiom p3 values less than (maxvalue)
)
select * from test partition(p1) union select * from test partitiom(p3);
---
刪除分區
alter table test drop partition p3;
添加分區
alter table test add partition p3 values less than (maxvalue);
拆分分區
alter table test split partition p2 at(60)
into (partition p21,partition p22);
合併分區
alter table test merge partitions p21,p22 into partition p2;
截斷分區(刪除數據)
alter table test truncate partition p3;
現有表分區
create table str as select * from student;
drop table student;
create table student(
studentid integer not null,
studentname varchar2(20),
score integer
)
partition by range(score)(
partition p1 values less than(60),
partition p2 values less than(75),
partition p3 values less than(85),
partition p4 values less than(maxvalue)
)
insert into student(select * from stu);
select * from test
原文出自:http://hi.baidu.com/gexin2009/item/2a93500615436ae4f45ba6ca