這篇文章主要講解了“Oracle和MySQL數(shù)據(jù)庫增、刪、改的方法是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Oracle和mysql數(shù)據(jù)庫增、刪、改的方法是什么”吧!
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、淮濱網(wǎng)站維護(hù)、網(wǎng)站推廣。
一、Oracle體系結(jié)構(gòu)
1、概念關(guān)系
數(shù)據(jù)庫與實(shí)例:Oracle只有一個(gè)數(shù)據(jù)庫,但可以有多個(gè)實(shí)例
Oracle數(shù)據(jù)庫與實(shí)例一對(duì)多,一般情況下只有一個(gè)實(shí)例,我們平常說的Oracle數(shù)據(jù)庫名,其實(shí)是Oracle的實(shí)例名
實(shí)例與用戶一對(duì)多
實(shí)例與表空間一對(duì)多
表空間與用戶一對(duì)多
2、Oracle結(jié)構(gòu)
物理結(jié)構(gòu):數(shù)據(jù)文件(xxx.dbf、xxx.ora)
邏輯結(jié)構(gòu):數(shù)據(jù)庫 表空間 段 區(qū) Oracle數(shù)據(jù)塊
二、Oracle實(shí)用命令及語句
在物理機(jī)的dos窗口輸入:sqlplus system/password@192.168.25.128:1521/orcl
查詢所有表空間:select tablespace_name from dba_tablespaces;
查詢所有角色:select * from dba_sys_privs;
查看所有用戶:select * from all_users;
查看當(dāng)前用戶:show user
通過scott登錄可以做測(cè)試:sqlplus scott/tiger@192.168.25.128:1521/orcl
賬號(hào)鎖定報(bào)錯(cuò):ERROR:ORA-28000: the account is locked
解決:重新用system登錄,執(zhí)行alter user scott account unlock;給scott用戶解鎖
密碼過期報(bào)錯(cuò):ERROR:ORA-28001: the password has expired
解決:重新輸入密碼tiger即可
查看當(dāng)前用戶下的所有表:select table_name from user_tables;
查看表結(jié)構(gòu):desc emp
清屏:host cls
設(shè)置行寬:set linesize 150
顯示行寬:show linesize
設(shè)置列寬:col ename for a8(8個(gè)字符的寬度)
設(shè)置每頁多少條數(shù)據(jù):set pagesize 20
顯示每頁多少條數(shù)據(jù):show pagesize
將命令行的語句寫入到指定的目下的指定的文件中:
指定寫到哪個(gè)目錄的哪個(gè)文件上:spool d:\1.text
寫入完畢:spool off
編輯之前輸入過的命令:
輸入ed,然后回車
該命令主要用在當(dāng)前一個(gè)sql語句寫錯(cuò)時(shí),又不想重新寫,這個(gè)時(shí)候可以用ed命令調(diào)出記事本
對(duì)先前的命令進(jìn)行編輯(如果該命令用在Linux系統(tǒng)中,調(diào)出來的是vi編輯器)
執(zhí)行之前緩存過的命令:/
三、創(chuàng)建表空間+創(chuàng)建用戶+系統(tǒng)管理員授權(quán)
1、創(chuàng)建表空間tablespace
create tablespace waterbos
datafile 'c:\waterbos.dbf'
size 100m
autoextend on
next 10m;
2、創(chuàng)建用戶user create user xuming identified by itcast default tablespace waterbos; 3、給創(chuàng)建的新用戶授權(quán)grant ORA-01045: user lacks CREATE SESSION privilege; logon denied 解決辦法:系統(tǒng)管理員給新用戶授權(quán): grant create session,resource to 用戶名; 等同于grant connect,resource to 用戶名; grant dba to 用戶名; 張三 超級(jí)管理員 對(duì)A資源的增加 李四 普通管理員 對(duì)A資源的刪除 王五 項(xiàng)目經(jīng)理 對(duì)A資源的修改 趙六 產(chǎn)品經(jīng)理 對(duì)A資源的查詢 錢七 技術(shù)顧問 對(duì)B資源的查詢
四、創(chuàng)建表+維護(hù)表結(jié)構(gòu)
DDL:Data Definition Language 數(shù)據(jù)定義語言 如:create、alter、drop、truncate
DML:Data Manipulation Language 數(shù)據(jù)操縱語言 如:select、update、delete、insert
DCL:Data Control Language 數(shù)據(jù)控制語言 如:grant、revoke
1、oracle常用數(shù)據(jù)類型
char,varchar2,long,number,date,clob,blob
2、創(chuàng)建表+約束 1)基本創(chuàng)建表語句 create table myemp3( id number(10), name varchar2(10) constraint myemp3_name_nn not null,--非空約束 gender varchar2(4) default '男',--默認(rèn)值 deptno NUMBER(2), email varchar2(20), constraint myemp3_id_pk primary key(id), --主鍵約束 constraint myemp3_gender_ck check(gender in('男','女')), --檢查約束 constraint myemp3_email_uk unique(email), --唯一約束 constraint myemp3_deptno_fk foreign key(deptno) references dept(deptno) on delete set null --外鍵約束 -- 沒有這種寫法constraint myemp3_name_nn not null ); 2)使用子查詢創(chuàng)建表 create table emp2 as select * from emp where 1=2; 由于1=2為假,該語句只拷貝了結(jié)構(gòu),沒有拷貝數(shù)據(jù) 3、修改表 1)修改表中列 oracle: alter table myemp3 modify ename vachar2(20); 不能帶column mysql : alter table myemp3 modify (column) ename varchar(20); 2)增加表中列 oracle: alter table myemp3 add gender varchar2(4); mysql : alter table myemp3 add (column) gender varchar(4); 3)刪除表中列 oracle: alter table myemp3 drop column gender; 必須帶column mysql : alter table myemp3 drop (column) gender; 4)重新命名表中列名 oracle: alter table myemp3 rename column ename to myname; 必須帶column mysql : alter table myemp3 change (column) ename myname varchar(20); 5)重新命名表名 oracle: rename myemp3 to myemp4; mysql : rename table mysqltname3 to mysqltname4; 必須帶table 4、刪除表 1)徹底刪除表 drop table myemp3 purge; 不加purge是暫時(shí)放到回收站中了 2)drop之后的數(shù)據(jù)放到了recyclebin回收站中 查看回收站:show recyclebin; 徹底清除回收站:purge recyclebin; 徹底刪除表:drop table myemp3 purge; 查看回收站表數(shù)據(jù): select * from "BIN$cd/KYgV5RY6/RxGTjn2Skg==$0"; 3)閃回 flashback table myemp3 to before drop;
五、對(duì)表數(shù)據(jù)操作(insert,update,delete)
1)向表中插入數(shù)據(jù)(insert into values)
insert into t_owners values(2,'張三',1,'3-3','7895',sysdate,1);
insert into t_owners2 select * from t_owners;
insert into 表名(id,name) values(xx,yy),(xx1,yy1) (mysql中可以這樣寫,oracle不能這樣寫)
向多張表中插入數(shù)據(jù):insert all into 表名(id,name) values(xx1,yy1) into 表名(id,name) values(xx2,yy2);
2)修改表中數(shù)據(jù)(update set) update 表名 set dateddd=dateadd-3,col1=col1+1; 3)刪除表中數(shù)據(jù) 使用delete刪除數(shù)據(jù) delete from myemp where empno=7369; 使用truncate 刪除整張表數(shù)據(jù) truncate table myemp;功能上與delete from myemp; 相同 delete和truncate 刪除數(shù)據(jù)的區(qū)別: (1)delete可以回滾,truncate不可以 (2)truncate比delete效率要高 實(shí)際企業(yè)開發(fā)中刪除數(shù)據(jù)庫中數(shù)據(jù)注意點(diǎn): (1)先把要?jiǎng)h除的數(shù)據(jù)備份 (2)確認(rèn)用于刪除的sql語句無誤 (3)盡量選擇能夠回滾數(shù)據(jù)的方式delete (4)drop > truncate > delete
六、導(dǎo)入和導(dǎo)出
1)整庫導(dǎo)入導(dǎo)出
exp system/itcast full=y
exp system/itcast full=y file=abc.dmp
imp system/itcast full=y
imp system/itcast full=y file=abc.dmp
2)按用戶導(dǎo)入與導(dǎo)出 exp system/itcast owner=xuming file=abc.dmp imp system/itcast file=abc.dmp fromuser=xuming 3)按表導(dǎo)入導(dǎo)出 exp xuming/itcast file=a.dmp tables=t_owners; imp xuming/itcast file=a.dmp tables=t_owners; 4)mysql導(dǎo)入導(dǎo)出 第一種導(dǎo)入數(shù)據(jù): mysql -uroot -proot mysql>create database crm; mysql>use crm; mysql>source d:/crm.sql 第二種導(dǎo)入數(shù)據(jù): 先創(chuàng)建好數(shù)據(jù)庫crm,執(zhí)行 mysql -uroot -proot crm < d:\crm.sql mysql導(dǎo)出數(shù)據(jù) mysqldump -uroot -proot crm > d:\crm1.sql
七、總結(jié)oracle與mysql在項(xiàng)目中使用區(qū)別
1、導(dǎo)入jar包不同
oracle:ojdbc14.jar 版本可能會(huì)變
mysql:mysql-connector-java-5.1.7-bin.jar 版本可能會(huì)變
注意:不同項(xiàng)目,jar包版本會(huì)有區(qū)別
2、jdbc獲取連接寫法
oracle:Connection connection = DriverManager.getConnection("
jdbc:oracle:thin:@192.168.25.128:1521:orcl", "xuming","itcast");
mysql:Connection connection = DriverManager.getConnection("jdbc:
mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
3、配置文件
# oracle jdbc properties
jdbc.url = jdbc:oracle:thin:@localhost:1521:xe
jdbc.driver= oracle.jdbc.driver.OracleDriver
jdbc.user = bos
jdbc.password = bos
#mysql jdbc properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/bos?characterEncoding=utf-8 jdbc.user=root jdbc.password=root
=========================================================================
一、單表查詢
完整語句:select from where group by having order by
1、簡(jiǎn)單條件查詢
=,!=,>,>=,<,<=
like
and 和or 邏輯運(yùn)算,and的優(yōu)先級(jí)大于or
between and:小值在前,大值在后;左右兩邊都包括邊界
is null/is not null:在mysql和oracle中沒有=null和!=null
not like,not between and,not in
2、去重:select distinct deptno,mgr保證deptno和mgr兩個(gè)列組成的值的唯一性
3、排序
order by sal,deptno desc;
desc只能對(duì)deptno進(jìn)行降序排列
底層實(shí)現(xiàn)的順序:首先按照sal升序排列,然后如果有相同的sal,再按照deptno進(jìn)行降序排列。
4、偽列rowid和rownum
rowid:每一行的物理地址 rownum:每一行排序的序號(hào)
select rowid,rownum,empno,ename from emp;
ROWID ROWNUM EMPNO ENAME
------------------ ---------- ---------- ------
AAAMfPAAEAAAAAgAAA 1 7369 SMITH
AAAMfPAAEAAAAAgAAB 2 7499 ALLEN
AAAMfPAAEAAAAAgAAC 3 7521 WARD
AAAMfPAAEAAAAAgAAD 4 7566 JONES
AAAMfPAAEAAAAAgAAE 5 7654 MARTIN
AAAMfPAAEAAAAAgAAF 6 7698 BLAKE
AAAMfPAAEAAAAAgAAG 7 7782 CLARK
AAAMfPAAEAAAAAgAAH 8 7788 SCOTT
AAAMfPAAEAAAAAgAAI 9 7839 KING
AAAMfPAAEAAAAAgAAJ 10 7844 TURNER
AAAMfPAAEAAAAAgAAK 11 7876 ADAMS
5、聚合函數(shù):min(),max(),avg(),sum(),count(),其中count(對(duì)于null值行直接濾過) group by 分組 select deptno,max(sal) from emp group by deptno;//這里的deptno為非聚合函數(shù)的列,所有需要參與到分組中去 select deptno,job,max(sal) from emp group by deptno,job;//多列分組,首先按照deptno分組,相同的組再按照job分組 select empno,deptno,sum(sal) from emp group by empno,deptno; 聚合函數(shù)group by使用having來過濾分組后的結(jié)果, 普通的列使用where過濾 6、別名:select ename as "員工姓名",sal 工資 from emp; as可以加,也可以省略,如果別名包含了特殊的關(guān)鍵詞必須加上"";否則可以不用加"" oracle中字符串和日期都是單引號(hào),只有別名才是雙引號(hào)。
二、多表查詢
只要兩個(gè)表能夠建立關(guān)聯(lián)關(guān)系,兩個(gè)表都能夠聯(lián)合查詢
1、內(nèi)連接:在笛卡爾集上選擇了滿足on條件的記錄行,連接的是兩個(gè)相同的列的值
(笛卡爾集:記錄條數(shù)是多個(gè)表記錄乘積,列數(shù)是多個(gè)表的列之和)
顯式內(nèi)連接:select * from emp e inner join dept d on e.deptno=d.deptno;
隱式內(nèi)連接:select * from emp e , dept d where e.deptno=d.deptno;
2、外連接:左外連接left join on/right join on 遵循的SQL99語法 select * from emp left join dept on emp.deptno=dept.deptno; oracle中(+) select * from emp where emp.deptno=dept.deptno(+); select d.deptno 部門編號(hào),d.dname 部門名稱,count(e.empno) 部門總?cè)藬?shù) from emp e, dept d where e.deptno(+)=d.deptno group by d.deptno,d.dname order by d.deptno;
三、子查詢
1、子查詢寫法
where后的子查詢:先查子查詢,子查詢的結(jié)果作為主查詢的過濾條件
select ename from emp e where e.deptno in
(select dept.deptno from dept where deptno>10);
from后的子查詢:先查子查詢,子查詢的結(jié)果,可以看成一張表,被主查詢查
select t.部門總?cè)藬?shù) from (select d.deptno 部門編號(hào),d.dname 部門名稱,
count(e.empno) 部門總?cè)藬?shù) from emp e, dept d
where e.deptno(+)=d.deptno
group by d.deptno,d.dname order by d.deptno) t;
select后的子查詢:先查主查詢,主查詢的結(jié)果作為子查詢的參數(shù),最后再查主查詢
select ename 員工編號(hào),
(select dname from dept where dept.deptno=emp.deptno) 部門名稱 from emp;
注意:select后面的子查詢,一定是單行子查詢(只返回一條結(jié)果記錄)
2、子查詢運(yùn)算符 單行子查詢使用(=,<>,>,>=,<,<=),多行子查詢使用單行運(yùn)算符和(in(),any(),all())
四、分頁查詢
1、rownum
一張表不經(jīng)過任何操作默認(rèn)帶有rownum行號(hào),經(jīng)過排序操作之后,該行號(hào)也隨著排序了,但不是從1-2-3排序的
為了重新按照1-2-3排序,我們把rownum當(dāng)成列來使用而不是行號(hào)
2、可以提煉成公式:
頁碼pageNo=1 每頁條數(shù)pageSize=5
select * from
(select rownum r,t.* from
(select * from emp order by sal desc) t
where rownum <=pageNopageSize)
where r>(pageNo-1)pageSize;
select * from emp order by sal desc limit 0,5; select * from emp order by sal desc limit (pageNo-1)*pageSize,pageSize;
五、函數(shù):任何一個(gè)函數(shù)都有返回值 (只作了解,把握可以處理哪幾種數(shù)據(jù),以及處理數(shù)據(jù)功能)
參考"oracle函數(shù)大全(分類顯示).chm"
字符函數(shù)
length(),concat()和||,substr()
數(shù)值函數(shù)round() trunc()select round(45.926,2) 一,round(45.926,1) 二,round(45.926,0) 三,round(45.926,-1) 四,round(45.926,-2) 五 from dual;select trunc(45.926,2) 一,trunc(45.926,1) 二,trunc(45.926,0) 三,trunc(45.926,-1) 四,trunc(45.926,-2) 五 from dual;日期函數(shù) sysdate systimestampnext_day(,'星期一')last_day()trunc()months_between()add_months()轉(zhuǎn)換函數(shù)to_char() 可以轉(zhuǎn)換成日期或者指定格式to_number() 字符串轉(zhuǎn)換成數(shù)字to_date() 字符串轉(zhuǎn)換日期 其他函數(shù) 關(guān)于null的函數(shù):nvl(a,b) a為null,則返回bnvl2(a,b,c) a為null,則返回c,否則返回b 在mysql中nullif(a,b) a=b,則返回null,否則返回a 在mysql中使用ifnull(a,b) 如果a為null ,則返回b 條件語句函數(shù)(重要)case when then else end decode(ename,'',,,,)分析排名函數(shù)()rank() over(order by xxx ) 相同的值排名相同,排名跳躍DENSE_RANK() over(order by xxx) 相同的值排名相同,排名連續(xù)ROW_NUMBER() over(order by xxx) 連續(xù)的排名,無論值是否相等
六、集合操作
union 去重,union all不去重
集合參與運(yùn)算(并集,交集,差集),筆記中圖案的黃色部分為查詢結(jié)果
差集:a minus b a-(a和b的交集)
集合操作必須滿足如下原則:
1、兩個(gè)集合的列數(shù)要一致
2、兩個(gè)集合中的列要順序相同,對(duì)應(yīng)類型相同
order by放在最后;
select ename,sal from emp
union all
select sal,ename from emp; 會(huì)報(bào)錯(cuò)
=========================================================================
一、視圖
1、普通視圖(復(fù)雜查詢結(jié)果放到一張?zhí)摂M表中,對(duì)視圖的操作其實(shí)是構(gòu)成視圖基表操作)
創(chuàng)建視圖:create or replace view myview_view as select * from myemp3;
刪除視圖:drop view myview;
理解:視圖一般不推薦做插入、修改操作,推薦做查詢,
因?yàn)槿绻龅揭恍┨厥庹Z句,insert,update 操作就不行,
企業(yè)開發(fā)中用的最多的是with read only視圖
2、物化視圖(能夠說出來,物化視圖是怎么一個(gè)原理) 創(chuàng)建視圖時(shí)是否生成數(shù)據(jù):BUILD IMMEDIATE(默認(rèn),創(chuàng)建即生成),BUILD DEFERRED 刷新方法有三種: FAST(增量刷新),COMPLETE(全量刷新) ,FORCE(默認(rèn)強(qiáng)制刷新) 刷新的模式有兩種:ON DEMAND(默認(rèn),手動(dòng)刷新) 和 ON COMMIT(自動(dòng)刷新) 理解:物化視圖存儲(chǔ)基于基表的數(shù)據(jù),也可以稱為快照,可以理解成一種特殊的表。 刪除物化視圖:drop materialized view myemp3_materialized; 3、 普通視圖與物化視圖的異同 1)相同:都指向一段sql語句 2)不同:普通視圖相當(dāng)于虛擬表;物化視圖會(huì)真正生成一張?zhí)厥獾谋?nbsp; 3)查詢物化視圖和查詢表的效率一樣 4、增量刷新的物化視圖 1)增量刷新跟全量刷新的區(qū)別?提示:下載app 2)創(chuàng)建物化視圖日志,記錄基表數(shù)據(jù)的變化:insert、update、delete 3)創(chuàng)建物化視圖的sql語句里面(as后面)一定要有rowid, 物化視圖日志表的rowid和物化視圖表的rowid做比較
二、序列(主鍵自增使用)
創(chuàng)建序列:create sequence myemp3_seq;
刪除序列:drop sequence myemp3_seq;
使用序列:在insert into myemp3 values(myemp3_seq.nextval,'張三','男',10,'
101001@qq.com');
獲取當(dāng)前值使用myemp3_seq.currval
注意:myemp3_seq.nextval 每調(diào)用一次nextval 指針向后移動(dòng)一位,也就是該序列增加一次;
create sequence seq_test999 increment by 10start with 1minvalue 0maxvalue 190cycle;會(huì)報(bào)錯(cuò):CACHE值必須小于CYCLE值(因?yàn)橐淮蜟ACHE的值有重復(fù)的會(huì)出錯(cuò))-- cache值:默認(rèn)20 指20個(gè)數(shù) -- cycle值:ceil((maxvalue-minvalue)/abs(increment))-- CACHE值必須小于等于CYCLE值 需要滿足一個(gè)公式:cache <= ceil((maxvalue-minvalue)/abs(increment)) 1 11 21 31 ... 191 20個(gè)數(shù) cache 1 11 21 31 ... 191 1 11 21 ...191場(chǎng)景:發(fā)消息 1、2、3、4、5、6、720 <= ceil((190-0)/10)改成 create sequence seq_test999 increment by 10start with 1minvalue 0maxvalue 191cycle;
三、同義詞(給其他對(duì)象取一個(gè)別名,方便其他用戶調(diào)用和縮寫對(duì)象名稱)
創(chuàng)建同義詞:create synonym mysys_synonym for myemp3; for 可以是其他對(duì)象
刪除同義詞:drop synonym mysys_synonym;
四、索引(提高檢索速度)
創(chuàng)建索引:create index myemp3_index on myemp3(name,email) 聯(lián)合(復(fù)合)索引
刪除索引:drop index myemp3_index;
創(chuàng)建索引的場(chǎng)景:
該列值很多(覆蓋很多條記錄),經(jīng)常被查詢,例如where ename="",where A.xx=B.xx
如果該列值經(jīng)常做update操作不適合建索引
=========================================================================
一、plsql的基本結(jié)構(gòu)和變量聲明
1、基本結(jié)構(gòu)
declare
--聲明變量
begin
--plsql體執(zhí)行其他操作
exception --有異常捕獲處理可以加上該關(guān)鍵字
--異常處理
end;
2、變量聲明:(常量、普通變量、引用普通類型變量、引用行類型變量、異常類型變量、游標(biāo)類型變量)set serveroutput on --注意這里使用sqldeveloper 工具需要將控制臺(tái)輸出打開一次就行DECLARE id constant number(2):=1;--使用constant 關(guān)鍵詞定義常量 name VARCHAR2(10):='悟空';--定義指定類型變量 mysal emp.sal%type;--定義引用存在表的列類型 myrow emp%rowtype;--定義引用存在表行類型,相當(dāng)于java中對(duì)象,該行類型包含所有列 select * into v_account from xx no_data exception;--異常定義 cursor c1 is select sal from emp;--游標(biāo)定義,該c1中相當(dāng)于java中集合,給 cursor c2(dno number) is select sal from emp where deptno=dno;---帶參游標(biāo)定義,該c2相當(dāng)于java中帶泛型集合BEGIN raise no_data;exception when no_data then xx; when others then xx; --常量就不能再賦值了 id:=2 錯(cuò)誤 SELECT sal INTO mysal FROM emp WHERE empno=7369; SELECT * INTO myrow FROM emp WHERE empno=7369; dbms_output.put_line(id); dbms_output.put_line(name); dbms_output.put_line(mysal); dbms_output.put_line(myrow.ename || ' ' || myrow.sal);END;
二、條件判斷語句
1、select case when then when then else end
2、select decode()
3、if then elsif then else end if;
if xx then xx
elsif xx then xx --注意不能寫成elseif
elsif xx then xx
else xx
end if;---注意加上分號(hào)
三、循環(huán)語句
第1種:
for i in 1..100 --退出循環(huán)是根據(jù)循環(huán)次數(shù)來定的
loop
end loop;
游標(biāo)使用for in格式更簡(jiǎn)單
for 不需要定義任意變量名稱 in c1;
loop
end loop;
第2種:
while --此處while后面聲明退出循環(huán)條件
loop
end loop;
第3種:
open c1; ---此處打開游標(biāo)
loop
fetch c1 into xx;
exit when c1%notfound; --此處exit when 聲明退出循環(huán)條件
end loop;
close c1; --此處關(guān)閉游標(biāo)
四、存儲(chǔ)過程
第1種創(chuàng)建方式:不帶參數(shù)
create or replace procedure mypro1 as
--這里可以聲明變量
begin
end;
第2種創(chuàng)建方式:帶in和out參數(shù),參數(shù)個(gè)數(shù)不限制
create or replace procedure mypro2(eno in emp.empno%type,name out varchar2) as
--這里可以聲明變量
myrow emp%rowtype;
begin
select * into myrow from emp where empno=eno;
name:=myrow.ename;
end;
plsql調(diào)用存儲(chǔ)過程:
execute mypro1;---對(duì)于無參數(shù)存儲(chǔ)過程可以這樣調(diào)用
或者
call mypro1(xxx)--對(duì)于只有in 參數(shù)可以這樣調(diào)用
或者
declare --存儲(chǔ)函數(shù)和存儲(chǔ)過程都可以這樣調(diào)用
name varchar2;
begin
mypro2(7369,name);---此處聲明一個(gè)變量用于接收out參數(shù)輸出
end;
五、存儲(chǔ)函數(shù)
1、創(chuàng)建存儲(chǔ)函數(shù):
create or replace function myfn1(eno in emp.empno%type) return varchar2 as
--實(shí)際return name 的name類型一定要和定義的return varchar2要一致
--這里可以聲明變量
myrow emp%rowtype;
name varchar2;
begin
select * into myrow from emp where empno=eno;
name:=myrow.ename;
return name;
end;
2、plsql調(diào)用存儲(chǔ)函數(shù):
select myfn1(7369) from dual;
或者
declare
name varchar2;--此處要聲明一個(gè)變量用于接收返回的結(jié)果
begin
name:=mypro2(7369);
dbms_output.put_line(ename);
end;
六、java api 調(diào)用存儲(chǔ)過程和存儲(chǔ)函數(shù)
DriverManager.getConncetion() -> Connection ->CallableStatement prepareCall
-> 設(shè)置傳入?yún)?shù)直接通過設(shè)置類型setInt() ->
設(shè)置傳出參數(shù),需要registerOutParameter
CallableStatement execute();
CallableStatement調(diào)用存儲(chǔ)過程和存儲(chǔ)函數(shù)的語句{call mypro1(?,?)} 調(diào)用存儲(chǔ)過程{?=call myfn1(?)} 調(diào)用存儲(chǔ)函數(shù)
七、觸發(fā)器
1、前置與后置
前置觸發(fā)器:sql語句commit之前
后置觸發(fā)器:sql語句commit之后
2、從影響行數(shù)來看
insert into emp() values() 插入了3條記錄
行級(jí)觸發(fā)器:觸發(fā)3次
表級(jí)觸發(fā)器(或者說語句觸發(fā)器):觸發(fā)了1次
3、語法
create or replace trigger 觸發(fā)器名
before|after
delete|update|insert
on 表名
for each row--行級(jí)觸發(fā)器
begin
pl/sql語句
end;
====================================================================================================================================
oracle總結(jié):
一、數(shù)據(jù)庫基本功底(ddl+dml(insert/update/delete)+單表+多表)
基本語句:select from where group by having order by
多表:where連接內(nèi)連接+on連接的外連接
jdbc操作相關(guān):
Statement/PreparedStatement/CallableStatement
con.prepareCall("存儲(chǔ)函數(shù)和存儲(chǔ)過程")
mysql連接語法:jdbc:
mysql://localhost:3306/mybatis?characterEncoding=utf-8
oracle連接語法:
jdbc:oracle:thin:@192.168.25.128:1521:orcl
二、數(shù)據(jù)庫優(yōu)化
1、sql語句優(yōu)化
1)查詢的時(shí)候盡量使用列名;如:select empno,所有列名寫出來 from emp;
2)分組查詢有聚合函數(shù),如果使用過濾,使用having
普通查詢帶條件,使用where
3)在子查詢和多表查詢之間選擇,盡量使用多表查詢
4)在集合運(yùn)算中,如果union 和union all都可以,考慮使用union all因?yàn)閡nion需要去掉重復(fù)的
5)能夠不要使用集合運(yùn)算就不要使用集合運(yùn)算
6)對(duì)于多個(gè)條件連接,可以將false的放在and最右邊,可以將true的條件放在or的最右邊
2、索引優(yōu)化 建立索引:?jiǎn)蝹€(gè)列建立索引以及多個(gè)列上建立索引(復(fù)雜或者聯(lián)合索引) 怎么建立索引:建立索引的兩個(gè)場(chǎng)景需要斟酌 1)建立索引:在某一個(gè)列上建立索引,必須考慮到該列的值是否覆蓋更廣,并且查詢很頻繁 2)不建立索引:某一個(gè)列經(jīng)常被改變,就不要建立索引
三、實(shí)際中常用的:
DML insert+update+delete+select
DDL create alter drop truncate
感謝各位的閱讀,以上就是“Oracle和mysql數(shù)據(jù)庫增、刪、改的方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Oracle和mysql數(shù)據(jù)庫增、刪、改的方法是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!