Mysql - 觸發器/視圖

觸發器在以前的項目中, 應用的着實很少, 沒有辦法的時候, 纔會去用這個. 由於這個東西在後期並不怎麼好維護, 也容易形成紊亂.數據庫

我最近的項目中, 因爲數據庫設計(別人設計的)緣由, 致使一些最簡單功能, 查詢起來, 都很麻煩和複雜. 牽涉表很是多, 表與表之間又互有部分關係. 我想說, 這是我見過的最糟糕的數據庫設計了. 最後沒辦法, 公司架構師給了觸發器的解決方案.服務器

1、觸發器架構

在項目中, 我新建了一張關係表, 把一些必要的, 有效的關係, 經過觸發器的方式, 更新到一張表中, 並在這張表裏面建了索引. 而後讀取數據的時候, 就經過鏈接這張關係表, 去獲得最後的有效數據. 看上去, 有點相似於讀寫分離的趕腳, 不過這並非多臺數據庫服務器間的.數據庫設計

因爲工做的關係, 我不能使用項目中的數據庫來作記錄, 那就本身搞幾個表來玩玩吧. 先建三張表spa

複製代碼
CREATE TABLE `tch_teacher` (
`Id` INT (11) NOT NULL AUTO_INCREMENT,
`Sex` SMALLINT (6) DEFAULT NULL,
`BId` VARCHAR (36) DEFAULT NULL,
`No` VARCHAR (20) DEFAULT NULL,
`Name` VARCHAR (30) DEFAULT NULL,
`IsDeleted` bit (1) DEFAULT b '0' PRIMARY KEY (`Id`),
KEY `Index_Sex` (`Sex`) USING BTREE,
KEY `Index_BId` (`BId`) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 21 DEFAULT CHARSET = latin1;設計

CREATE TABLE `tch_contact` (
`Id` INT (11) NOT NULL AUTO_INCREMENT,
`TId` INT (11) DEFAULT NULL,
`QQ` VARCHAR (15) DEFAULT NULL,
`Weixin` VARCHAR (50) DEFAULT NULL,
`Phone` VARCHAR (15) DEFAULT NULL,
PRIMARY KEY (`Id`),
KEY `Index_TId` (`TId`) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 11 DEFAULT CHARSET = latin1 COMMENT = '聯繫方式表';索引

CREATE TABLE tch_all (
Id INT NOT NULL,
Sex SMALLINT,
BId VARCHAR (36),
NO VARCHAR (20),
NAME VARCHAR (30),
QQ VARCHAR (15),
Weixin VARCHAR (50),
Phone VARCHAR (15)
) COMMENT '完整表';
複製代碼
get

我這裏就經過觸發器的方式, 來維護tch_all這張表. 例子很差, 主要是介紹功能, 見諒.it

複製代碼
delimiter $
drop trigger if EXISTS tg_insert_all;
create trigger tg_insert_all after insert on tch_teacher for each ROW
BEGIN
  insert into tch_all(Sex,BId,NO,NAME) values(new.sex, new.bid, new.no, new.name);
end $
delimiter;
複製代碼
1. 語法date

create trigger 觸發器名 before/after insert/update/delete on 表名 for each row

begin

end

   本文選自熱飯論壇

相關文章
相關標籤/搜索