mysql 触发器的学习1

mysql> #接下来学习触发器的概念
mysql> #触发器是由事件来触发某个操作的,包括insert update delete语句
mysql> #触发器的基本形式:
mysql> #create trigger 触发器名 before|after 触发事件 on 表名 for each row 执行语句
mysql> #如果需要执行多条语句则使用 begin …… end 不同语句之间用“;”分号分割
mysql> #所以使用多行执行语句时,一定要用到的是 delimiter 来设置新的mysql的结束符号
mysql> #查看触发器的情况,可以使用show triggers 和 select * from information_schema.triggers
mysql> #删除触发器 drop trigger 触发器名
mysql>
mysql>
mysql>
mysql> #实际练习
mysql> use test;
No connection. Trying to reconnect...
Connection id: 6
Current database: *** NONE ***

Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> create table product (
-> id int(10) not null unique primary key,
-> name varchar(20) not null,
-> function varchar(50) ,
-> company varchar(20) not null,
-> address varchar(50)
-> );
Query OK, 0 rows affected (0.20 sec)

mysql> create table operate (
-> op_id int(10) not null unique paimary key auto_increment,
-> op_type varchar(20) not null,
-> op_time time not null
-> );
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your

MySQL server version for the right syntax to use near ‘paimary key auto_increment,
op_type varchar(20) not null,
op_time time not null
‘ at line 2
mysql> create table operate (
-> op_id int(10) not null unique primary key auto_increment,
-> op_type varchar(20) not null,
-> op_time time not null
-> );
Query OK, 0 rows affected (0.09 sec)

mysql> show create table product \G
*************************** 1. row ***************************
Table: product
Create Table: CREATE TABLE `product` (
`id` int(10) NOT NULL,
`name` varchar(20) NOT NULL,
`function` varchar(50) DEFAULT NULL,
`company` varchar(20) NOT NULL,
`address` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql> show tables;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 7
Current database: test

+----------------+
| Tables_in_test |
+----------------+
| operate |
| product |
+----------------+
2 rows in set (0.01 sec)

mysql> create trigger p_b_insert before insert on product for each row
-> insert into operate values (null,‘insert‘,now());
Query OK, 0 rows affected (0.13 sec)

mysql> create trigger p_af_update after update on product for each row
-> insert into operate values (null,‘update‘,now());
Query OK, 0 rows affected (0.06 sec)

mysql> create trigger p_af_del after delete on product for each row
-> insert into operate values (null,‘delete‘,now());
Query OK, 0 rows affected (0.07 sec)

mysql> insert into product values
-> (1,‘电脑‘,‘编程‘,‘IBM‘,‘北京市朝阳区‘),
-> (2,‘手机‘,‘打电话‘,‘小米‘,‘北京市海淀区‘),
-> (3,‘平板电脑‘,‘玩游戏‘,‘苹果‘,‘美国洛杉矶‘);
Query OK, 3 rows affected (0.26 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from product;
+----+----------+----------+---------+--------------+
| id | name | function | company | address |
+----+----------+----------+---------+--------------+
| 1 | 电脑 | 编程 | IBM | 北京市朝阳区 |
| 2 | 手机 | 打电话 | 小米 | 北京市海淀区 |
| 3 | 平板电脑 | 玩游戏 | 苹果 | 美国洛杉矶 |
+----+----------+----------+---------+--------------+
3 rows in set (0.00 sec)

mysql> select * from operate;
+-------+---------+----------+
| op_id | op_type | op_time |
+-------+---------+----------+
| 1 | insert | 00:22:03 |
| 2 | insert | 00:22:03 |
| 3 | insert | 00:22:03 |
+-------+---------+----------+
3 rows in set (0.00 sec)

mysql> update product set name=‘桌面PC‘ where id=1;
Query OK, 1 row affected (0.09 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from operate ;
+-------+---------+----------+
| op_id | op_type | op_time |
+-------+---------+----------+
| 1 | insert | 00:22:03 |
| 2 | insert | 00:22:03 |
| 3 | insert | 00:22:03 |
| 4 | update | 00:23:33 |
+-------+---------+----------+
4 rows in set (0.00 sec)

mysql> delete from product where id=2;
Query OK, 1 row affected (0.00 sec)

mysql> select * from product;
+----+----------+----------+---------+--------------+
| id | name | function | company | address |
+----+----------+----------+---------+--------------+
| 1 | 桌面PC | 编程 | IBM | 北京市朝阳区 |
| 3 | 平板电脑 | 玩游戏 | 苹果 | 美国洛杉矶 |
+----+----------+----------+---------+--------------+
2 rows in set (0.00 sec)

mysql> select * from operate;
+-------+---------+----------+
| op_id | op_type | op_time |
+-------+---------+----------+
| 1 | insert | 00:22:03 |
| 2 | insert | 00:22:03 |
| 3 | insert | 00:22:03 |
| 4 | update | 00:23:33 |
| 5 | delete | 00:24:11 |
+-------+---------+----------+
5 rows in set (0.00 sec)

mysql> show triggers \G
*************************** 1. row ***************************
Trigger: p_b_insert
Event: INSERT
Table: product
Statement: insert into operate values (null,‘insert‘,now())
Timing: BEFORE
Created: NULL
sql_mode:
Definer: [email protected]
character_set_client: latin1
collation_connection: latin1_swedish_ci
Database Collation: latin1_swedish_ci
*************************** 2. row ***************************
Trigger: p_af_update
Event: UPDATE
Table: product
Statement: insert into operate values (null,‘update‘,now())
Timing: AFTER
Created: NULL
sql_mode:
Definer: [email protected]
character_set_client: latin1
collation_connection: latin1_swedish_ci
Database Collation: latin1_swedish_ci
*************************** 3. row ***************************
Trigger: p_af_del
Event: DELETE
Table: product
Statement: insert into operate values (null,‘delete‘,now())
Timing: AFTER
Created: NULL
sql_mode:
Definer: [email protected]
character_set_client: latin1
collation_connection: latin1_swedish_ci
Database Collation: latin1_swedish_ci
3 rows in set (0.04 sec)

mysql> Drop trigger p_b_insert;
Query OK, 0 rows affected (0.02 sec)

mysql> drop trigger p_af_update;
Query OK, 0 rows affected (0.02 sec)

mysql> show triggers \G
*************************** 1. row ***************************
Trigger: p_af_del
Event: DELETE
Table: product
Statement: insert into operate values (null,‘delete‘,now())
Timing: AFTER
Created: NULL
sql_mode:
Definer: [email protected]
character_set_client: latin1
collation_connection: latin1_swedish_ci
Database Collation: latin1_swedish_ci
1 row in set (0.01 sec)

mysql> create trigger p_af_insert after insert on product for each row
-> insert into operate values (null,‘insert‘,now());
Query OK, 0 rows affected (0.02 sec)

mysql> create trigger p_b_update before update on product for each row
-> insert into operate values (null,‘update‘,now());
Query OK, 0 rows affected (0.02 sec)

mysql> create trigger p_b_del before delete on product for each row
-> insert into operate values (null,‘delete‘,now());
Query OK, 0 rows affected (0.02 sec)

mysql> select * from information_schema.triggers where trigger_name=‘p_b_del‘ \G
*************************** 1. row ***************************
TRIGGER_CATALOG: NULL
TRIGGER_SCHEMA: test
TRIGGER_NAME: p_b_del
EVENT_MANIPULATION: DELETE
EVENT_OBJECT_CATALOG: NULL
EVENT_OBJECT_SCHEMA: test
EVENT_OBJECT_TABLE: product
ACTION_ORDER: 0
ACTION_CONDITION: NULL
ACTION_STATEMENT: insert into operate values (null,‘delete‘,now())
ACTION_ORIENTATION: ROW
ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
ACTION_REFERENCE_OLD_ROW: OLD
ACTION_REFERENCE_NEW_ROW: NEW
CREATED: NULL
SQL_MODE:
DEFINER: [email protected]
CHARACTER_SET_CLIENT: latin1
COLLATION_CONNECTION: latin1_swedish_ci
DATABASE_COLLATION: latin1_swedish_ci
1 row in set (1.45 sec)

mysql> insert into product values (2,‘ccc‘,‘止血‘,‘北京药厂‘,‘北京市昌平区‘);
Query OK, 1 row affected (0.00 sec)

mysql> update product set address=‘天津市开发区‘ where id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> delete from product where id=2;
Query OK, 1 row affected (0.00 sec)

mysql> select * from product;
+----+----------+----------+---------+--------------+
| id | name | function | company | address |
+----+----------+----------+---------+--------------+
| 1 | 桌面PC | 编程 | IBM | 北京市朝阳区 |
| 3 | 平板电脑 | 玩游戏 | 苹果 | 美国洛杉矶 |
+----+----------+----------+---------+--------------+
2 rows in set (0.00 sec)

mysql> select * from operate;
+-------+---------+----------+
| op_id | op_type | op_time |
+-------+---------+----------+
| 1 | insert | 00:22:03 |
| 2 | insert | 00:22:03 |
| 3 | insert | 00:22:03 |
| 4 | update | 00:23:33 |
| 5 | delete | 00:24:11 |
| 6 | insert | 00:34:36 |
| 7 | update | 00:35:08 |
| 8 | delete | 00:35:23 |
| 9 | delete | 00:35:23 |
+-------+---------+----------+
9 rows in set (0.00 sec)

mysql>
mysql>
mysql> #触发器的关键在于 before 和 after
mysql> #before是先完成触发,再增删改
mysql> #after是先完成增删改,再进行触发
mysql> 另外还有 old 和 new的使用

mysql 触发器的学习1

时间: 2024-08-26 19:29:01

mysql 触发器的学习1的相关文章

MySQL触发器 trigger学习

触发器:一类特殊的事物.可监视某种数据操作,并触发相关操作(insert/update/delete).表中的某些数据改变,希望同一时候能够引起其他相关数据改变的需求. 作用:变化自己主动完毕某些语句查询,加入程序的灵活性. 创建触发器语法: #delimiter $$  //默认情况下.delimiter是分号";",sql语句带有;号结尾会报错,没到end就算到结束了,使用delimiter $$作用就是告诉mysql语句的结尾换成以$结束,对应使用end$$结束 create t

mysql触发器学习

创建一个触发器 语法: create trigger 触发器名字 create trigger xiaoshou_update_trigger  after update on xiaoshou  for each row  begin  update jiangjin  set xiaoshouer=( select sum(taoshu*danjia)from xiaoshou  where userid=new.userid  and month=new.month) , jiangjin

mysql 触发器学习

mysql 触发器学习 1. 一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: delimiter | create trigger t_trigger before insert on t  for each row begin set @x = "hello trigger";        set NEW.s1 = 55; end; | 1.3. 如果触发器创建错误,可能只能删除了,至少我试过不能replace dro

MySQL 触发器结构及三个案例demo

--你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了.这跟SQL的标准有所不同. CREATE TRIGGER语法 CREATE TRIGGER trigger_name trigger_time trigger_event    ON tbl_name FOR EACH ROW trigger_stmt 触发程序与命名为tbl_name的表相关. trigger_time是触发程序的动作时间.它可以是BEFORE或AFTER,以指明触

MySQL数据库开发学习教程

MySQL数据库开发学习教程 一.数据库设计 数据库设计(一)--数据库设计http://blog.51cto.com/9291927/2087925 二.MySQL数据库开发基础教程 MySQL数据库开发基础教程目录如下: MySQL数据库基础(一)--MySQL数据库简介http://blog.51cto.com/9291927/2087947MySQL数据库基础(二)--MySQL字符集与乱码解析http://blog.51cto.com/9291927/2088254MySQL数据库基础

mysql 触发器基础:

触发器,顾名思义,基于某具体的DML语句的触发或执行,来执行一个动作.mysql触发器在6个不同的集成点进行定义:before insert:插入之前执行触发器 after insert:插入之后执行触发器before update:插入之前执行触发器after update:插入之后执行触发器before delete:删除之前执行触发器 after delete:删除之后执行触发器 每个点只能定义一个触发器,触发器只可以应用在for each row上,没有每个语句级的功能.也没有代替触发器

mysql触发器的实战经验-不错的文章

1   引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程序比如fc-star管理端,sfrd(das),dorado都会用到触发器程序,实现对于数据库增.删.改引起事件的关联操作.本文介绍了触发器的类型和基本使用方法,讲述了触发器使用中容易产生的误区,从mysql源码中得到触发器执行顺序的结论,本文最后是实战遭遇的触发器经典案例.没有特殊说明时,本文的实

8Python全栈之路系列之MySQL触发器

Python全栈之路系列之MySQL触发器 l 对某个表进行增/删/改操作的前后如果希望触发某个特定的行为时,可以使用触发器,触发器用于定制用户对表的行进行增/删/改前后的行为. 创建触发器基本语法 插入前 CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW BEGIN     ... END 插入后 CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON t

MySQL触发器分析

触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力. 数据库触发器有以下的作用: 1.安全性.可以基于数据库的值使用户具有操作数据库的某种权利. # 可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据. # 可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%. 2.审计.可以跟踪用户对数据库的操作. # 审计用户操作数据库的语句. # 把用户对数据库的更新写入审计表. 3.实