2013-10-26 20 views
0

我有一個表名稱Service(product,loca,from_agent,to_agent)。如何編寫強制外鍵的觸發器

產品的參考產品(PNO)

from_agent引用顧客(CNO)U驅動程序(drno)U航空公司(肛)

to_agent引用顧客(CNO)U驅動程序(drno)U航空公司(ANO)

CNO =客戶編號這是另一種表名「客戶」具有其他詳細信息,如姓名,地址等

drno =驅動程序編號,其是具有其它細節,例如名稱的另一個表名「驅動程序」,地址等

肛=航空公司數量是另一個表名「航空公司」,它具有其他細節,如depport,depttime,arrtime等。

想編寫一個觸發器,它會發力,在產品的外鍵在進行任何更改之前檢查表。假設本地映射透明度

請幫幫忙,我只是瞭解觸發器和分發數據庫

+2

爲什麼使用觸發器而不僅僅是明顯的東西,如[外鍵約束](http:// dev .mysql.com/DOC/EN /創建表,外商keys.html)? – eggyal

+0

@eggyal - 我認爲這是他的想法。 –

+0

因爲我有一個碎片表,我想檢查其他表上的主鍵,客戶表中的cno存在,驅動程序表中的drno存在,並且ano實際存在於航空公司表中,如果用戶嘗試要更改任何其他字段,應觸發觸發器以提醒用戶。我希望你明白我的意思 – JamesBond

回答

0

讓我們想象一下數據庫的店:項目,產品,品牌(對於爲例:「黃標緻自行車條紋」所以在這裏引用爲「標緻自行車」的項目,作爲一個品牌「標緻」的。

CREATE TABLE IF NOT EXISTS `brands` (
`brandId` int(11) NOT NULL AUTO_INCREMENT, 
`brandName` varchar(30) NOT NULL, 
PRIMARY KEY (`brandId`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; 

CREATE TABLE IF NOT EXISTS `items` (
    `itemId` int(11) NOT NULL AUTO_INCREMENT, 
`generalProductId` int(11) NOT NULL, 

    PRIMARY KEY (`itemId`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

    CREATE TABLE IF NOT EXISTS `products` (
    `productId` int(11) NOT NULL AUTO_INCREMENT, 
    `productName` varchar(200) NOT NULL, 
    `productBrand` int(11) NOT NULL, 

    PRIMARY KEY (`productId`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; 

ALTER TABLE products ADD FOREIGN KEY(productBrand) REFERENCES brands(brandId) ON DELETE RESTRICT ON UPDATE  CASCADE; 
ALTER TABLE items ADD FOREIGN KEY(itemBrand) REFERENCES product(productBrand) ON DELETE RESTRICT ON UPDATE CASCADE; 

,你有一個外鍵約束,這使得項繼承了產品指定的品牌,它繼承本身從品牌。在這種情況下,如果你修改Name爲一個特殊的BrandId,那麼子表將會擁有這個特性。 RESTRICT意味着你不能打破鏈條和數據庫將不允許你刪除一個在其他地方引用的條目:)