當前位置:首頁 » 編程語言 » sqlupdateinsert

sqlupdateinsert

發布時間: 2022-07-02 10:42:43

sql update和insert的問題

分幾步實現
1.建立個臨時表1,用a表主鍵關聯b表主鍵,將關聯上的插入到臨時表1
2.建立個臨時表2,用a表主鍵關聯b表主鍵,將關聯不上的插入到臨時表2
你就可以分別update,和insert了

⑵ oracle SQL語句 update insert

if exists(select * from table where 條件=條件)
update
else
insert
這是sql server的,oracle好象不行,只能用存儲過程寫

⑶ sql2000的insert,select,update和delete命令使用

(1)數據記錄篩選:
sql="select*from數據表where欄位名=欄位值orderby欄位名[desc]"
sql="select*from數據表where欄位名like'%欄位值%'orderby欄位名[desc]"
sql="selecttop10*from數據表where欄位名orderby欄位名[desc]"
sql="select*from數據表where欄位名in('值1','值2','值3')"
sql="select*from數據表where欄位名between值1and值2"
(2)更新數據記錄:
sql="update數據表set欄位名=欄位值where條件表達式"
sql="update數據表set欄位1=值1,欄位2=值2……欄位n=值nwhere條件表達式"
(3)刪除數據記錄:
sql="deletefrom數據表where條件表達式"
sql="deletefrom數據表"(將數據表所有記錄刪除)
(4)添加數據記錄:
sql="insertinto數據表(欄位1,欄位2,欄位3…)values(值1,值2,值3…)"
sql="insertinto目標數據表select*from源數據表"(把源數據表的記錄添加到目標數據表)
(5)數據記錄統計函數:
AVG(欄位名)得出一個表格欄平均值
COUNT(*|欄位名)對數據行數的統計或對某一欄有值的數據行數統計
MAX(欄位名)取得一個表格欄最大的值
MIN(欄位名)取得一個表格欄最小的值
SUM(欄位名)把數據欄的值相加
引用以上函數的方法:
sql="selectsum(欄位名)as別名from數據表where條件表達式"
setrs=conn.excute(sql)
用rs("別名")獲取統的計值,其它函數運用同上。
(5)數據表的建立和刪除:
CREATETABLE數據表名稱(欄位1類型1(長度),欄位2類型2(長度)……)

⑷ SQL語言中add,alter,drop和insert,update,delete的區別

add,alter,drop是DDL語句,insert,update,delete是DML語句
DDL語句是對表結構的修改,DML語句是對表數據的修改
比如一個表有3列數據C1,C2,C3如下
a,1,2
b,2,3
c,3,4
DDL語句可以給表添加一列,刪除一列或者刪掉這個表
而DML語句是給表裡的數據修改,添加,或刪除

⑸ sql update和insert效率

update要看where條件和所鎖行的使用率。insert要看索引數和欄位數量。

⑹ 有關sql insert觸發器和update觸發器

DML觸發器有三類:

1, insert觸發器;

2, update觸發器;

3, delete觸發器;

觸發器的組成部分:

觸發器的聲明,指定觸發器定時,事件,表名以類型

觸發器的執行,PL/SQL塊或對過程的調用

觸發器的限制條件,通過where子句實現

類型:

應用程序觸發器,前台開發工具提供的;

資料庫觸發器,定義在資料庫內部由某種條件引發;分為:

DML觸發器;

資料庫級觸發器;

替代觸發器;

DML觸發器組件:

1,觸發器定時

2,觸發器事件

3,表名

4, 觸發器類型

5, When子句

6, 觸發器主體

可創建觸發器的對象:資料庫表,資料庫視圖,用戶模式,資料庫實例

創建DML觸發器:

Create [or replace] trigger [模式.]觸發器名

Before| after insert|delete|(update of 列名)

On 表名

[for each row]

When 條件

PL/SQL塊

For each row的意義是:在一次操作表的語句中,每操作成功一行就會觸發一次;不寫的話,表示是表級觸發器,則無論操作多少行,都只觸發一次;

When條件的出現說明了,在DML操作的時候也許一定會觸發觸發器,但是觸發器不一定會做實際的工作,比如when 後的條件不為真的時候,觸發器只是簡單地跳過了PL/SQL塊;

Insert觸發器的創建:

create or replace trigger tg_insert

before insert on student

begin

dbms_output.put_line('insert trigger is chufa le .....');

end;

/

執行的效果:

SQL> insert into student

2 values(202,'dongqian','f');

insert trigger is chufa le .....

update表級觸發器的例子:

create or replace trigger tg_updatestudent

after update on student

begin

dbms_output.put_line('update trigger is chufale .....');

end;

/

運行效果:

SQL> update student set se='f';

update trigger is chufale .....

已更新8行;

可見,表級觸發器在更新了多行的情況下,只觸發了一次;

如果在after update on student後加上

For each row的話就成為行級觸發器,運行效果:

SQL> update student set se='m';

update trigger is chufale .....

update trigger is chufale .....

update trigger is chufale .....

update trigger is chufale .....

update trigger is chufale .....

update trigger is chufale .....

update trigger is chufale .....

update trigger is chufale .....

已更新8行;

:new 與: old:必須是針對行級觸發器的,也就是說要使用這兩個變數的觸發器一定有for each row

這兩個變數是系統自動提供的數組變數,:new用來記錄新插入的值,old用來記錄被刪除的值;

使用insert的時候只有:new里有值;

使用delete的時候只有:old里有值;

使用update的時候:new和:old里都有值;

可以這樣使用: dbms_output.put_line('insert trigger is chufa

dbms_output.put_line('new id is : '||:new.stui

dbms_output.put_line('new name is : '||:new.st

dbms_output.put_line('new se is : '||:new.se);

可以這樣從數據字典中查看一個表上有哪幾個觸發器:

SQL> select trigger_name from user_triggers

2 where table_name=upper('student');

TRIGGER_NAME

------------------------------

TG_INSERT

TG_UPDATESTUDENT

帶有:old變數的行級delete觸發器:

create or replace trigger tg_deletestudent

before delete on student

for each row

begin

dbms_output.put_line('old is: '||:old.stuid);

dbms_output.put_line('old name: '||:old.stuname);

end;

/

運行效果:

SQL> delete from student;

old is: 202

old name: dongqian

old is: 101

old name: liudehua

old is: 102

old name: lingqingxia

old is: 103

old name: lichanggong

old is: 104

old name: zhenxiuwen

old is: 1001

old name: lilianjie

old is: 1009

old name: tongleifuck

old is: 203

old name: kfdj

old is: 209

old name: fuck

已刪除9行

When的使用:如果在begin也就是說觸發器的PL/SQL主體塊執行前加上when(old.se=』f』)的話,DML操作照做不誤,但是只會在刪除

Se=』f』的那行的時候才會執行觸發器的主體動作,執行效果:

SQL> delete from student;

old is: 209

old name: fuck

已刪除9行; 這里雖然刪了9行,但是只執行了一次觸發器的主體,做為一個行級觸發器;

混合類型觸發器:

Inserting,deleting,updating三個謂詞可以分別指示當前操作到底是哪個;

create or replace trigger hunhetrigger

before insert or update or delete on student

for each row

begin

if inserting then

dbms_output.put_line('insert le.........');

end if;

if deleting then

dbms_output.put_line('delete le .......');

end if;

end;

/

插入的時候就自動判斷當前動作為插入:

SQL> insert into student values(303,'me','f');

insert le.........

刪除的時候就自動判斷當前動作為刪除:

SQL> delete from student;

delete le .......

注意,既然觸發器內部的主體PL/SQL是語句,那麼它同樣也可以是插入刪除操作而不一定只是dbms_output列印一些信息;

這正是日誌表的原理:在用戶執行了DML語句的時候觸發主體為插入日誌表以記錄操作軌跡的觸發器;

為什麼用觸發器? 當我們有兩個表用來記錄商品的出庫入庫情況,good_store用來記錄庫存的產品類別和數量,

而good_out用來記錄出庫的產品類別和數量,那麼每當我們出庫的某個類別的產品一定數量的時候,我們應該在good_out中插入該產品的類別和

出庫數量,而同時也應該在good_store表中用update來更新庫存的相應類別的產品的數量;這就交給了我們兩個必須完成的任務:插入good_out

表後更新good_store表,這樣的手工過程使得我們覺得非常ugly,如果只做其中一個那造成數據的不一致;所以現在我們可以用觸發器,在

Good_out表的插入操作上綁定一個對good_store進行更新的觸發器;當然這個過程應該是一個事務,你不必擔心插入good_out表執行了,而綁定在這個動作上的觸發器操作不會執行,相信Oracle設計為原子性了;

注意:觸發器會使得原來的SQL語句速度變慢;

替代觸發器:

創建在視圖上的觸發器,就是替代觸發器,只能是行級觸發器;

為什麼要用替代觸發器?

假如你有一個視圖是基於多個表的欄位連接查詢得到的;現在如果你想直接對著這個視圖insert;那你一定在想,我對視圖的插入操作

怎麼來反應到組成這個視圖的各個表中呢?事實上,除了定義一個觸發器來綁定在對視圖上的插入動作上外,你沒有別的辦法通過系統的報錯而直接向視圖中插入數據;這就是我們用替代觸發器的原因;替換的意思實際上是觸發器的主體部分把對視圖的插入操作轉換成詳細的對各個表的插入;

變異表:變異表就是當前SQL語句正在修改的表,所以在一個變異表上綁定的觸發器不可以使用cout()函數,原因很簡單:SQL語句剛剛修改了表,你怎麼統計??

約束表:

維護:

Alter trigger …..disenable; 使得觸發器不可用;

Alter trigger ……enable; 開啟觸發器;

Oracle的內置程序包

擴展資料庫的功能;

為PL/SQL提供對SQL功能的訪問

一般具有sys許可權的高級管理人員使用;

一個典型的程序包就是dbms_output,你老是用它的過程put_line();

Dbms_standard 提供語言工具;

Dbms_lob操作Oracle LOB;就是針對大型數據的操作設計的;

Dbms_lock用戶定義的鎖;

Dbms_job 允許對PL/SQL過程進行調度;

Dbms_alert 支持資料庫事件的非同步通知;

1,dbms_output的一些過程:

a):enable

b):disable

c):put只是把數據放到緩存(SQL-Plus的緩存,實際就是整個窗口)中,無輸出功能;

d):put_line可以使得以前放在緩存中所有數據輸出;並且換到下一行;

e):new_line

f):get_line

g):get_lines

2,dmbs_lob ,這個包只能是由系統管理員來操作;

Clob以字元數據存儲可達2G;

Blob以二進制數據存儲可達4G;

Nclob以unicode字元存儲;

一個文件下載列表的例子:

創建下載目錄表:

create table downfilelist

(

id varchar(20) not null primary key,

name varchar(40) not null,

filelocation bfile,

description clob

)

/

創建目錄:

create or replace directory filedir as 'f:\oracle'

/只是向Oralce注冊了目錄,實際上並不會真的建立目錄在磁碟上;Oracle無權管理和鎖定操作系統的文件系統;

向目錄表中插入數據:

insert into downfilelist

values('10001','oracle plsal編程指南',bfilename(upper('filedir'),'demo.mp3'),'this is a mp3 music')

insert into downfilelist

values('10002','java 大權', bfilename(upper('filedir'),'x.jpg'),'good super girl')

/在filedir的目錄f:\oracle下實際存儲著demo.mp3 ,x.jpg;

注意,如果你試圖查詢,效果是 :

sys>select * from downfilelist;

SP2-0678: 列或屬性類型無法通過 SQL*Plus 顯示

因為第三列是無法顯示的,是一個二進制的;

下面使用dbms_lob的一些過程來進行操作:

1,read過程

declare

tempdesc clob;

ireadcount int;

istart int;

soutputdesc varchar(100);

begin

ireadcount:=5;

istart:=1;

select description into tempdesc from downfilelist where id='10001';

dbms_lob.read(tempdesc,ireadcount,istart,soutputdesc); 把clob類型的tempdesc中的數據讀到字元類型的soutputdesc里;

dbms_output.put_line('Top 5 character is: '||soutputdesc);

end;

/注意,對unicode來說,漢字和字母所佔的位數是一樣的;

2,getlength函數

select description into tempclob from downfilelist where id=『10001』;

ilen:=dbms_lob.GetLength(tempclob);

append,……..

發現這樣的現象:select x into y的時候,y並不是獨立於x的拷貝,因為當修改y的時候x也被修改了;

3, fileexists函數

select id ,dbms_lob.fileexists(filelocation) from downfilelist;

如果在bfile類型欄位filelocation指定的系統下的目錄中存在filelocation指定的系統文件,則返回int 1,否則返回0;

這說明Oracle還是可以檢測到系統的文件情況的,如同java.io包里的類一樣;

對bfile類型數據的操作函數有fileisopen,fileopen,fileclose等等;

如果對您有幫助,請記得採納為滿意答案,謝謝!祝您生活愉快!

vaela

⑺ update和insert的區別

一、作用不同

1、update:語句用於修改表中的數據。

2、insert:是sql資料庫中的語句,可以用於向表格中插入新的行。

二、語法不同

1、update:UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值。

2、insert:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)。


三、用法不同

1、update:UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'

2、insert:INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')。

⑻ SQL語言中INSERT、DELETE、UPDATE實現的是什麼功能

add,alter,drop是ddl語句,insert,update,delete是dml語句
ddl語句是對表結構的修改,dml語句是對表數據的修改
比如一個表有3列數據c1,c2,c3如下
a,1,2
b,2,3
c,3,4
ddl語句可以給表添加一列,刪除一列或者刪掉這個表
而dml語句是給表裡的數據修改,添加,或刪除

熱點內容
安卓為什麼不能車機互聯 發布:2022-08-18 10:39:14 瀏覽:165
諸神黃昏伺服器怎麼使用 發布:2022-08-18 10:37:38 瀏覽:286
少兒python培訓 發布:2022-08-18 10:37:27 瀏覽:540
c語言編譯器手機版輸出亂碼 發布:2022-08-18 10:34:20 瀏覽:780
qe如何設置密碼 發布:2022-08-18 10:31:16 瀏覽:897
ubuntu編譯安裝nginx 發布:2022-08-18 10:31:03 瀏覽:97
植物大戰僵屍安卓版如何轉移存檔 發布:2022-08-18 10:31:02 瀏覽:112
怎麼重新架設伺服器 發布:2022-08-18 10:30:45 瀏覽:741
伺服器故障又叫什麼 發布:2022-08-18 10:28:06 瀏覽:872
sq資料庫 發布:2022-08-18 10:28:00 瀏覽:775