mysql触发器实例

mysql触发器实例

测试表1

?

1

2

3

4

5

6

7

8

DROP TABLE IF EXISTS test;

CREATE TABLE test (

id bigint(11) unsigned NOT NULL AUTO_INCREMENT,

name varchar(100) NOT NULL DEFAULT '',

type varchar(100),

create_time datetime,

PRIMARY KEY (ID)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

测试表2

?

1

2

3

4

5

6

7

8

9

DROP TABLE IF EXISTS test_hisy;

CREATE TABLE test_hisy (

id bigint(11) unsigned NOT NULL AUTO_INCREMENT,

name varchar(100) NOT NULL DEFAULT '',

type varchar(100),

create_time datetime,

operation varchar(100) COMMENT '操作类型',

PRIMARY KEY (ID)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

insert触发器

表test新增记录后,将type值为“1”的记录同时插入到test_hisy表中(AFTER INSERT:录入后触发, BEFORE INSERT:录入前触发)

?

1

2

3

4

5

6

7

8

9

10

11

DELIMITER //

DROP TRIGGER IF EXISTS t_after_insert_test//

CREATE TRIGGER t_after_insert_test

AFTER INSERT ON test

FOR EACH ROW

BEGIN

IF new.type='1' THEN

insert into test_hisy(name, type, create_time, operation)

values(new.name, new.type, new.create_time, 'insert');

END IF;

END;//

update触发器

表test修改时,若type值为“2”则将修改前的记录同时插入到test_hisy表中(AFTER UPDATE:修改后触发, BEFORE UPDATE:修改前触发)

?

1

2

3

4

5

6

7

8

9

10

11

DELIMITER //

DROP TRIGGER IF EXISTS t_before_update_test//

CREATE TRIGGER t_before_update_test

BEFORE UPDATE ON test

FOR EACH ROW

BEGIN

IF new.type='2' THEN

insert into test_hisy(name, type, create_time, operation)

values(old.name, old.type, old.create_time, 'update');

END IF;

END;//

delete触发器

表test删除记录前,将删除的记录录入到表test_hisy中(AFTER DELETE:删除后触发, BEFORE DELETE:删除前触发)

?

1

2

3

4

5

6

7

8

9

DELIMITER //

DROP TRIGGER IF EXISTS t_before_delete_test//

CREATE TRIGGER t_before_delete_test

BEFORE DELETE ON test

FOR EACH ROW

BEGIN

insert into test_hisy(name, type, create_time, operation)

values(old.name, old.type, old.create_time, 'delete');

END;//

注:以上触发器例子中出现的new为修改后的数据, old为修改前的数据