触发器在以前的项目中, 应用的着实很少, 没有办法的时候, 才会去用这个. 由于这个东西在后期并不怎么好维护, 也容易形成紊乱.数据库
我最近的项目中, 因为数据库设计(别人设计的)缘由, 致使一些最简单功能, 查询起来, 都很麻烦和复杂. 牵涉表很是多, 表与表之间又互有部分关系. 我想说, 这是我见过的最糟糕的数据库设计了. 最后没办法, 公司架构师给了触发器的解决方案.服务器
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
本文选自热饭论坛