




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1第第7章章 約束和觸發(fā)器約束和觸發(fā)器第7章 約束和觸發(fā)器2SQL中約束種類中約束種類n數(shù)據(jù)庫設(shè)計質(zhì)量體現(xiàn)為約束數(shù)據(jù)庫設(shè)計質(zhì)量體現(xiàn)為約束constraints所提供的可靠性保障。約束以表達式或所提供的可靠性保障。約束以表達式或語句的形式存儲在數(shù)據(jù)庫中。約束是一語句的形式存儲在數(shù)據(jù)庫中。約束是一種主動性種主動性(active)元素,當數(shù)據(jù)庫特定元素,當數(shù)據(jù)庫特定狀態(tài)發(fā)生改變時自動運行。狀態(tài)發(fā)生改變時自動運行。nSQL2提供部分完整性約束:鍵、參照完提供部分完整性約束:鍵、參照完整性、域約束、元組約束等。整性、域約束、元組約束等。nSQL3提供觸發(fā)器提供觸發(fā)器trigger機制:由特定機制:由特定
2、事件觸發(fā)某種主動性元素。事件觸發(fā)某種主動性元素。 第7章 約束和觸發(fā)器37.1 鍵和外鍵鍵和外鍵第7章 約束和觸發(fā)器4鍵與外鍵鍵與外鍵n鍵鍵key是最重要的約束。每個表都必須確定自是最重要的約束。每個表都必須確定自己的鍵。己的鍵。n每個表都可能有多個屬性集可作為鍵,稱為每個表都可能有多個屬性集可作為鍵,稱為“候選鍵候選鍵candicate key”。n一個表只能確定一個主鍵一個表只能確定一個主鍵(Primary Key)。n若某個屬性說明為若某個屬性說明為Unique,則它是一個候選,則它是一個候選鍵。鍵。n若關(guān)系的某個屬性說明為外鍵,則該屬性出現(xiàn)若關(guān)系的某個屬性說明為外鍵,則該屬性出現(xiàn)的值,
3、一定會在另一個關(guān)系的主鍵中出現(xiàn)。的值,一定會在另一個關(guān)系的主鍵中出現(xiàn)。第7章 約束和觸發(fā)器5主鍵聲明主鍵聲明n如何說明表中的主鍵?如何說明表中的主鍵? SQL語言有兩種說明主鍵的方式。語言有兩種說明主鍵的方式。方式方式1:Create Table語句中,某屬性語句中,某屬性說明之后加說明之后加Primary Key方式方式2:屬性表之后,加:屬性表之后,加Primary Key(屬性屬性1,屬性,屬性2,)u若主鍵有多個屬性,則只能用方式若主鍵有多個屬性,則只能用方式2。uGUI操作方式更方便直觀。操作方式更方便直觀。第7章 約束和觸發(fā)器6用用UNIQUE聲明鍵聲明鍵n如何說明表中的主鍵?如何
4、說明表中的主鍵? SQL語言有兩種說明主鍵的方式。語言有兩種說明主鍵的方式。方式方式1:Create Table語句中,某屬性語句中,某屬性說明之后加說明之后加UNIQUE方式方式2:屬性表之后,加:屬性表之后,加UNIQUE(屬性屬性1,屬性,屬性2,)u若用若用UNIQUE說明鍵有多個屬性,則只說明鍵有多個屬性,則只能用方式能用方式2。uGUI操作方式更方便直觀操作方式更方便直觀第7章 約束和觸發(fā)器7例子例子n考慮關(guān)系考慮關(guān)系SalesMan的模式的模式(方式方式1) CREATE TABLE SalesMan( empid VARCHAR (10) PRIMARY KEY, idno V
5、ARCHAR (18) UNIQUE, name VARCHAR (30), gender CHAR(1), birthday DATE, address VARCHAR(255), phone VARCHAR(13) );第7章 約束和觸發(fā)器8例子例子n考慮關(guān)系考慮關(guān)系SalesMan的模式的模式(方式方式2) CREATE TABLE SalesMan( empid VARCHAR (10), idno VARCHAR (18), name VARCHAR (30), gender CHAR(1), birthday DATE, address VARCHAR(255), phone VA
6、RCHAR(13), PRIMARY KEY(empid), UNIQUE(idno) );第7章 約束和觸發(fā)器9主鍵和主鍵和Unique屬性之間有何區(qū)別和聯(lián)系屬性之間有何區(qū)別和聯(lián)系n一個表有且僅有一個主鍵;而一個表有且僅有一個主鍵;而Unique屬性可屬性可有多個或沒有。有多個或沒有。n主鍵是單個屬性,則該屬性隱含為主鍵是單個屬性,則該屬性隱含為Unique。n主鍵不允許有主鍵不允許有NULL值,屬性為值,屬性為Unique則允許則允許有有NULL值。值。n若主鍵是多個屬性,則每個屬性都不可能為若主鍵是多個屬性,則每個屬性都不可能為Unique。nDBMS對主鍵往往自動賦予一些特征,如建立對
7、主鍵往往自動賦予一些特征,如建立索引索引index等。等。第7章 約束和觸發(fā)器10強制鍵約束強制鍵約束n什么操作會導(dǎo)致違背鍵約束?什么操作會導(dǎo)致違背鍵約束?對表的對表的delete操作不會違背該表的鍵約操作不會違背該表的鍵約束。束。insert和和update可能違背該表的鍵約束??赡苓`背該表的鍵約束。nSQL實施主鍵約束即是在實施主鍵約束即是在insert和和update時檢驗鍵值,避免空值或重復(fù)鍵時檢驗鍵值,避免空值或重復(fù)鍵值。值。第7章 約束和觸發(fā)器11外鍵約束聲明外鍵約束聲明n如何說明外鍵如何說明外鍵 兩種兩種SQL方式:方式:方式方式1:某屬性之后加:某屬性之后加references
8、 (被參照屬性被參照屬性)。方式方式2:屬性表之后加:屬性表之后加foreign key references (被被參照屬性參照屬性)。 其中:被參照屬性應(yīng)是被參照表的其中:被參照屬性應(yīng)是被參照表的Primary Key或或unique屬性。屬性。第7章 約束和觸發(fā)器12例子例子n例:例:CREATE TABLE StarsIn( Movietitle VARCHAR(90) NOT NULL, Movieyear INT NOT NULL , StarName VARCHAR(30) NOT NULL, PRIMARY KEY (Movietitle, Movieyear, StarNam
9、e), FOREIGN KEY (Movietitle, Movieyear) References Movie(title, year), FOREIGN KEY StarName References Stars(name) );第7章 約束和觸發(fā)器13外鍵約束聲明外鍵約束聲明n是否可定義一個表參照自己?是否可定義一個表參照自己?可以??梢?。 例如:例如:salesman(empid, idno, name, managerid, deptid, )n外鍵是否可取外鍵是否可取NULL值?值?可以。可以。第7章 約束和觸發(fā)器14維護引用完整性維護引用完整性n數(shù)據(jù)庫更新時如何保證參照完整性數(shù)據(jù)
10、庫更新時如何保證參照完整性? 有三種可選策略,以保證參照完整性:有三種可選策略,以保證參照完整性:n1 Restrict限制限制(缺省缺省)n2 Cascade級聯(lián)級聯(lián)n3 Set Null置空置空第7章 約束和觸發(fā)器15Restrict限制限制(缺省缺省)n以以StarsIn(movieTitle,MovieYear, )參照參照Movie(title,year, ) 為例:為例:n對于對于StarsIn (參照表參照表),下面操作被拒絕:,下面操作被拒絕:ninsert語句中語句中movieTitle和和MovieYear值不值不是是Movie中已有的一個主鍵值。中已有的一個主鍵值。nup
11、date語句中改變語句中改變movieTitle和和MovieYear值為不是值為不是Movie中已有的主鍵值。中已有的主鍵值。n對于對于Movie(被參照表被參照表),Restrict拒絕以下操拒絕以下操作:作:ndelete語句刪除一個被語句刪除一個被StarsIn參照的元組。參照的元組。nupdate語句修改一個被語句修改一個被StarsIn參照的參照的title和和year主鍵值。主鍵值。第7章 約束和觸發(fā)器16Cascade級聯(lián)級聯(lián)n影響被參照表的影響被參照表的delete和和update操作。操作。n以以StarsIn(movieTitle,MovieYear, )參照參照Movi
12、e(title,year, ) 為例:為例:n當當Movie (被參照表被參照表)delete刪除某個元組刪除某個元組時,時,StarsIn (參照表參照表)中所有參照元組被自中所有參照元組被自動刪除。動刪除。n當當Movie (被參照表被參照表)update修改某個元組修改某個元組的的title或或year值時,值時,StarsIn (參照表參照表)中所中所有參照元組被自動修改。有參照元組被自動修改。第7章 約束和觸發(fā)器17Set Null置空置空n影響被參照表的影響被參照表的delete和和update操作。操作。n以以Movie(title,year, , ProducerC#)參照參照
13、MovieExec(name, ,cert#, )為例:為例:n首先首先ProducerC#應(yīng)允許應(yīng)允許NULL。n當當MovieExec (被參照表被參照表)delete刪除某個元組時,刪除某個元組時,Movie (參照表參照表)中所有參照元組的中所有參照元組的ProducerC#被被置空。置空。n當當MovieExec (被參照表被參照表)update修改某個元組的修改某個元組的cert#時,時,Movie (參照表參照表)中所有參照元組的中所有參照元組的ProducerC#被置空。被置空。第7章 約束和觸發(fā)器18維護引用完整性策略的語法維護引用完整性策略的語法n這些策略可在說明外鍵的同時
14、描述。這些策略可在說明外鍵的同時描述。 references (屬性屬性表表)Action 其中:其中: Action: ON Update | Delete Restrict | Cascade | Set Null 第7章 約束和觸發(fā)器19例子例子CREATE TABLE Movie( title VARCHAR(90) NOT NULL, year INT NOT NULL, length INT, colorIn CHAR(1) NOT NULL, producerC# INT, PRIMARY KEY (title,year), FOREIGN KEY producerC# Refe
15、rences MovieExec(cert#) ON DELETE CASCADE ON UPDATE CASCADE);u注意:對于一個外鍵,注意:對于一個外鍵,Update和和Delete可分別采用可分別采用不同的策略。不同的策略。第7章 約束和觸發(fā)器20“懸掛元組懸掛元組” dangling tuples n什么是什么是“懸掛元組懸掛元組” dangling tuples?對于參照關(guān)系對于參照關(guān)系A(chǔ),外鍵值未出現(xiàn)在被參照表中,外鍵值未出現(xiàn)在被參照表中的元組,即違背參照完整性的元組。的元組,即違背參照完整性的元組。n如何避免出現(xiàn)如何避免出現(xiàn)“懸掛元組懸掛元組”?1 Restrict策略:在
16、參照關(guān)系中對產(chǎn)生懸掛元組策略:在參照關(guān)系中對產(chǎn)生懸掛元組的操作予以禁止。的操作予以禁止。2 Cascade策略:自動刪除或修改產(chǎn)生出來的策略:自動刪除或修改產(chǎn)生出來的懸掛元組。懸掛元組。3 Set Null策略:產(chǎn)生出來的每個懸掛元組的外策略:產(chǎn)生出來的每個懸掛元組的外鍵值置空鍵值置空NULL,使其不參照任何元組。,使其不參照任何元組。第7章 約束和觸發(fā)器217.2 屬性和元組上的約束屬性和元組上的約束第7章 約束和觸發(fā)器22屬性值約束屬性值約束n限制某些屬性的值在特定范圍內(nèi)限制某些屬性的值在特定范圍內(nèi).n這類約束可用下列方式表達這類約束可用下列方式表達:在關(guān)系式定義中給出屬性的約束。在關(guān)系式
17、定義中給出屬性的約束。在整個元組上的約束。該約束是關(guān)系模在整個元組上的約束。該約束是關(guān)系模式的一部分,不與任何屬性相關(guān)。式的一部分,不與任何屬性相關(guān)。第7章 約束和觸發(fā)器23非空約束非空約束n如何說明某屬性非空如何說明某屬性非空NOT NULL?在在create table指令中,屬性說明之后加指令中,屬性說明之后加NOT NULL;若不顯式說明,該屬性隱含為允許空值。若不顯式說明,該屬性隱含為允許空值。n說明非空屬性有何效果?說明非空屬性有何效果? 不能用不能用update修改其值為修改其值為NULL。 insert時必須指定一個非空值。時必須指定一個非空值。 不能使用外鍵的不能使用外鍵的S
18、et Null策略。策略。u注意:主鍵屬性和注意:主鍵屬性和unique屬性隱含非空;允屬性隱含非空;允許為空的屬性不可能是主鍵或許為空的屬性不可能是主鍵或unique。第7章 約束和觸發(fā)器24基于屬性的基于屬性的Check約束約束n如何限制某屬性的值在特定范圍?如何限制某屬性的值在特定范圍?在屬性說明之后,增加在屬性說明之后,增加check(條件條件),屬性的值應(yīng)使條件為真。屬性的值應(yīng)使條件為真。條件的語法與條件的語法與Where子句的條件一樣。子句的條件一樣。當當insert和和update使屬性值改變時,執(zhí)使屬性值改變時,執(zhí)行行check檢驗,拒絕預(yù)約屬性不一致的檢驗,拒絕預(yù)約屬性不一致
19、的更新。更新。第7章 約束和觸發(fā)器25例子例子n設(shè)有關(guān)系模式:設(shè)有關(guān)系模式: Stodio(name,address,presC#) 要求其證書號必須至少為位數(shù)字,則可寫出約束:要求其證書號必須至少為位數(shù)字,則可寫出約束: presC# INT REFERENCES MovieExec(cert#) CHECK(presC#=100000)n設(shè)有關(guān)系模式:設(shè)有關(guān)系模式: MovieStar(name,address,gender,birthday) 要求其性別只能為要求其性別只能為和和,則可寫出約束:,則可寫出約束: gender CHAR(1) CHECK(gender IN (,)第7章
20、約束和觸發(fā)器26基于屬性的基于屬性的Check約束約束n何時檢查何時檢查check條件?條件?只有當該表執(zhí)行只有當該表執(zhí)行insert或或update時才檢測時才檢測check條件。條件。u注意:注意:check條件中可包含其它關(guān)系的屬性,但應(yīng)避條件中可包含其它關(guān)系的屬性,但應(yīng)避免。免。例如,設(shè)有關(guān)系例如,設(shè)有關(guān)系 Stodio(name,address,presC#) 其關(guān)系中其關(guān)系中presC#值必須在關(guān)系值必須在關(guān)系 MovieExec(name,address,cert#,networth) 的的cert#之中出現(xiàn)約束,則在定義中給出約束:之中出現(xiàn)約束,則在定義中給出約束: presC
21、# INT CHECK(presC# IN(SELECT cert# FROM MovieExec) 修改或刪除修改或刪除cert#的值,使某個的值,使某個presC#對應(yīng)的鍵值不對應(yīng)的鍵值不在在MovieExec中是可能的。中是可能的。第7章 約束和觸發(fā)器27域約束域約束n域域domain 也稱為用戶定義數(shù)據(jù)類型也稱為用戶定義數(shù)據(jù)類型user-defined data type.n基于某種基本數(shù)據(jù)類型且增加特定約束,基于某種基本數(shù)據(jù)類型且增加特定約束,存于數(shù)據(jù)庫中,可供多個表使用。存于數(shù)據(jù)庫中,可供多個表使用。 例如:例如: CREATE DOMAIN sex integer NOT NUL
22、L DEFAULT 1 CHECK(VALUE IN(0,1) )第7章 約束和觸發(fā)器28基于元組的基于元組的Check約束約束n對某個表中元組的約束而不是對某個屬性的約束。對某個表中元組的約束而不是對某個屬性的約束。 例如:在關(guān)系模式例如:在關(guān)系模式 MovieStar(name,address,gender,birthday) 中要求每個元組的審核:如果影星為男性,則他的名中要求每個元組的審核:如果影星為男性,則他的名字不能與字不能與Ms.開頭。開頭。n在定義表的性質(zhì)時增加如下約束:在定義表的性質(zhì)時增加如下約束: CHECK(gender= F OR name NOT LIKE Ms.%)
23、n何時檢查何時檢查check條件?條件?只有當該表執(zhí)行只有當該表執(zhí)行insert或或update時才檢測時才檢測check條件。條件。u注意:如果在表中既有屬性注意:如果在表中既有屬性check也有元組也有元組check,則先檢測屬性。則先檢測屬性。第7章 約束和觸發(fā)器297.3 修改約束修改約束第7章 約束和觸發(fā)器30給約束命名給約束命名n為修改或刪除一個已經(jīng)存在的約束,約束必須有名字。為修改或刪除一個已經(jīng)存在的約束,約束必須有名字。為了命名,在約束前加保留字為了命名,在約束前加保留字CONSTRAINT和該約和該約束的名字。束的名字。例如:設(shè)有關(guān)系模式例如:設(shè)有關(guān)系模式 MovieStar
24、(name,address,gender,birthday)為其主鍵約束命名:為其主鍵約束命名: name CHAR(30) CONSTRAINT NameIsKey PRIMARY KEY為影星的性別約束命名:為影星的性別約束命名: gender CHAR(1) CONSTRAINT NoAndro CHECK(gender IN (,)第7章 約束和觸發(fā)器31修改表上的約束修改表上的約束n可用可用ALTER TABLE來修改約束。來修改約束。用保留字用保留字DROP和要刪除的約束名字來刪除約束。和要刪除的約束名字來刪除約束。用保留用保留ADD,后跟要添加的約束來實現(xiàn)約束的添加。,后跟要添加
25、的約束來實現(xiàn)約束的添加。例如:要刪除例如:要刪除MovieStar的主鍵約束的主鍵約束 ALTER TABLE MovieStar DROP NameIsKey 要添加要添加MovieStar的主鍵約束的主鍵約束 ALTER TABLE MovieStar ADD CONSTRAINT NameIsKey PRIMARY KEY(name)第7章 約束和觸發(fā)器32斷言斷言(Assertion)nSQL標準提出了一種強制任何條件的簡標準提出了一種強制任何條件的簡單的斷言形式,與單的斷言形式,與check類似。類似。n斷言的定義為斷言的定義為 CREATE ASSERTION CHECK()n當建
26、立斷言時,斷言的條件必須是真,當建立斷言時,斷言的條件必須是真,并且要永遠保持為真。任何引起斷言條并且要永遠保持為真。任何引起斷言條件為假的數(shù)據(jù)庫更新都被拒絕。件為假的數(shù)據(jù)庫更新都被拒絕。第7章 約束和觸發(fā)器33斷言斷言(Assertion)n斷言要寫什么?斷言要寫什么?在寫斷言條件時所引用的任何屬性都必在寫斷言條件時所引用的任何屬性都必須標明。須標明。n何時檢查斷言的何時檢查斷言的check條件?條件?只有當該表執(zhí)行只有當該表執(zhí)行insert或或update時才檢時才檢測測check條件。條件。n何時刪除斷言?何時刪除斷言?DROP ASSERTION 第7章 約束和觸發(fā)器34例子例子n假定
27、希望其凈資產(chǎn)值少于假定希望其凈資產(chǎn)值少于10000000的人不能成為制片廠經(jīng)理。的人不能成為制片廠經(jīng)理。 CREATE ASSERTION RichPres CHECK (NOT EXISTS (SELECT * FROM Studio,MovieExec WHERE presC#=cert# AND networth10000000 ) )注意與約束的區(qū)別:注意與約束的區(qū)別:CREATE TABLE Studio( name CHAR(30) PRIMARY KEY, address VARCHAR(255), presC# INT REFERENCES MovieExec(cert#),
28、CHECK (presC# NOT IN (SELECT cert# FROM MovieExec WHERE networth10000000) ) )第7章 約束和觸發(fā)器35約束的比較約束的比較n下面表格列出了基于屬性的檢查約束、基于元下面表格列出了基于屬性的檢查約束、基于元組的檢查約束和斷言之間的主要區(qū)別。組的檢查約束和斷言之間的主要區(qū)別。約束類型約束類型聲明的位置聲明的位置動作的時間動作的時間確保成立?確保成立?基于屬性的基于屬性的CHECK屬性屬性對關(guān)系插入元組對關(guān)系插入元組或?qū)傩孕薷幕驅(qū)傩孕薷娜绻亲硬樵?,如果是子查詢,則不能確保則不能確?;谠M的基于元組的CHECK關(guān)系模式元素
29、關(guān)系模式元素對關(guān)系插入元組對關(guān)系插入元組或?qū)傩孕薷幕驅(qū)傩孕薷娜绻亲硬樵?,如果是子查詢,則不能確保則不能確保斷言斷言數(shù)據(jù)庫模式元素數(shù)據(jù)庫模式元素對任何提及的關(guān)對任何提及的關(guān)系改變系改變是是第7章 約束和觸發(fā)器367.4 觸發(fā)器觸發(fā)器第7章 約束和觸發(fā)器37觸發(fā)器觸發(fā)器(trigger)n基于特定事件觸發(fā)的特定的約束檢驗?;谔囟ㄊ录|發(fā)的特定的約束檢驗。u注意:各種商業(yè)數(shù)據(jù)庫可能使用不同語注意:各種商業(yè)數(shù)據(jù)庫可能使用不同語法。法。n觸發(fā)器是什么?觸發(fā)器是什么?一個觸發(fā)器一個觸發(fā)器trigger是存儲在某個表中的是存儲在某個表中的一個命名的數(shù)據(jù)庫對象。當該表進行某一個命名的數(shù)據(jù)庫對象。當該表進行
30、某種數(shù)據(jù)更新時,將自動觸發(fā)一組種數(shù)據(jù)更新時,將自動觸發(fā)一組SQL語語句的執(zhí)行。句的執(zhí)行。第7章 約束和觸發(fā)器38事件條件動作規(guī)則事件條件動作規(guī)則 nEvent事件:數(shù)據(jù)更新指令:事件:數(shù)據(jù)更新指令:insert / delete /updatenCondition條件:當事件發(fā)生后,檢查條件是條件:當事件發(fā)生后,檢查條件是否滿足:否滿足:若不滿足,則不執(zhí)行動作而狀態(tài)轉(zhuǎn)移。若不滿足,則不執(zhí)行動作而狀態(tài)轉(zhuǎn)移。若滿足,則執(zhí)行一組動作之后狀態(tài)轉(zhuǎn)移。若滿足,則執(zhí)行一組動作之后狀態(tài)轉(zhuǎn)移。nAction動作:一組動作:一組SQL指令,通常是更新操作指令,通常是更新操作 Old狀態(tài)New狀態(tài)Event/Con
31、ditionAction第7章 約束和觸發(fā)器39觸發(fā)器與約束不同觸發(fā)器與約束不同n當數(shù)據(jù)庫程序員聲明的事件發(fā)生時,觸當數(shù)據(jù)庫程序員聲明的事件發(fā)生時,觸發(fā)器被激活。事件可以是對某個特定關(guān)發(fā)器被激活。事件可以是對某個特定關(guān)系的插入、刪除或修改。系的插入、刪除或修改。n當觸發(fā)器被事件激活時,不是立即執(zhí)行,當觸發(fā)器被事件激活時,不是立即執(zhí)行,而是首先由觸發(fā)器測試觸發(fā)條件。如果而是首先由觸發(fā)器測試觸發(fā)條件。如果條件不成立,則響應(yīng)事件的觸發(fā)器不做條件不成立,則響應(yīng)事件的觸發(fā)器不做任何事情。任何事情。n如果觸發(fā)器聲明的條件滿足,則與觸發(fā)如果觸發(fā)器聲明的條件滿足,則與觸發(fā)器相連的動作由器相連的動作由DBMS執(zhí)
32、行。執(zhí)行。第7章 約束和觸發(fā)器40SQL中的觸發(fā)器特征中的觸發(fā)器特征n動作可以在觸發(fā)事件之前或之后被執(zhí)行。動作可以在觸發(fā)事件之前或之后被執(zhí)行。n在被觸發(fā)的事件中,動作既可指向被插入、刪在被觸發(fā)的事件中,動作既可指向被插入、刪除、修改元組的新值,也可以指向其舊值。除、修改元組的新值,也可以指向其舊值。n更新事件可以被局限到某個特定的屬性或某一更新事件可以被局限到某個特定的屬性或某一些屬性。些屬性。n條件由條件由WHEN短語給出。僅僅當規(guī)則被觸發(fā),短語給出。僅僅當規(guī)則被觸發(fā),并且觸發(fā)事件的發(fā)生使條件成立時,動作才被并且觸發(fā)事件的發(fā)生使條件成立時,動作才被執(zhí)行。執(zhí)行。n程序員可以選擇動作執(zhí)行的聲明方
33、式:程序員可以選擇動作執(zhí)行的聲明方式:n一次只對一個更新元組,或者一次只對一個更新元組,或者n一次針對在數(shù)據(jù)庫操作中被改變的所有元組。一次針對在數(shù)據(jù)庫操作中被改變的所有元組。第7章 約束和觸發(fā)器41觸發(fā)器的語法觸發(fā)器的語法 CREATE TRIGGER trigger-name ON table-name FOR trigger-event AS trigger-name:一個表可定義多個不重一個表可定義多個不重名的觸發(fā)器。名的觸發(fā)器。trigger-event: DELETE | INSERT | UPDATEAS:是觸發(fā)器要執(zhí)行的操作。:是觸發(fā)器要執(zhí)行的操作。 第7章 約束和觸發(fā)器42例子
34、例子n要求:每個銷售員只能屬于某一個部門;部門要求:每個銷售員只能屬于某一個部門;部門經(jīng)理只能由本部門中某個銷售員擔任。經(jīng)理只能由本部門中某個銷售員擔任。Salesman (empid, idno, name, gender, phone, deptid)Department (deptid, name, headerid)第7章 約束和觸發(fā)器43例子例子n僅靠外鍵建立的參照完整性,不能解決的問題:僅靠外鍵建立的參照完整性,不能解決的問題:1 當當update department set headerid = ? where deptid = ? 時時 不能保證新不能保證新headerid在在Salesman中是本部門成員。中是本部門成員。 例如:例如:update department set headerid = A0044 where deptid = 2; A0044是部門是部門1的成員卻擔任了部門的成員卻擔任了部門2的經(jīng)理。的經(jīng)理。 應(yīng)在其擔任部門應(yīng)在其擔任部門2經(jīng)理之前,先更新經(jīng)理之前,先更新salesman使其作使其作為部門為部門2的成員。的成員。 update salesman set
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 班組安全三級教育
- 大班體育《好玩的瓶子》教案設(shè)計
- 2025標準個人勞務(wù)合同協(xié)議書范本
- 2025綜合布線系統(tǒng)安裝工程合同
- 青少年網(wǎng)癮問題教育心理學(xué)
- 2025委托研發(fā)合同-范本
- 2025婚禮攝影租賃合同范文
- 2024-2025統(tǒng)編版道德與法治六年級下冊第一單元試卷及答案
- 2025健身房合作協(xié)議合同書范本
- 2025教科版一年級下冊科學(xué)期中考試卷及答案 (三套)
- 學(xué)前兒童情感教育的家庭實踐策略
- 美好家園《8未來城市》課件 -2024-2025學(xué)年浙人美版(2024)初中美術(shù)七年級下冊
- 解析:2024年廣東省深圳市龍崗區(qū)中考二模物理試題(解析版)
- 教師語言與溝通藝術(shù)知到智慧樹章節(jié)測試課后答案2024年秋溫州大學(xué)
- 共享菜園協(xié)議書5篇
- 人教版小學(xué)數(shù)學(xué)知識點總結(jié)大全
- 畢業(yè)設(shè)計(論文)-基于SolidWorks的廚余垃圾處理器設(shè)計
- 北師大版小學(xué)數(shù)學(xué)家長會發(fā)言稿范文
- GMP取樣管理課件
- 安徽省普通高中2024學(xué)年學(xué)業(yè)水平合格性測試英語試題(原卷版)
- 《中國古代物理學(xué)》課件
評論
0/150
提交評論