mysql学习笔记之五(触发器)

触发器(trigger)是mysql的数据库对象之一,该对象与编程语言中的函数非常类似,都需要声明、执行,但是触发器的执行不是由程序调用,也不是手工启动,而是由事件来触发,激活从而实现执行。

实例:

1、学生表中拥有字段学生姓名,字段学生总数,每当添加一条学生记录时,学生总数就必须同时改变。

2、在顾客信息表中拥有字段顾客名字,字段顾客电话和字段顾客地址缩写,每当添加一条关于顾客记录时,都需要检查电话号码格式是否正确,顾客地址缩写是否正确。

总之,需要在表发生更改时,自动进行一些处理,如检查数据合法性,触动其他字段更新,mysql的约束里没有字段大小范围的约束。

mysql在触发如下语句时,就会自动执行所设置的操作:

1、DELETE

2、INSERT

3、UPDATE

其他sql语句则不会激活触发器

一个表在相同触发时间的相同触发时间,只能创建一个触发器。因此,对于有经验的用户,当在创建触发器之前,需要查看mysql软件中是否已经存在该标示符的触发器和触发器的相关事件。

一、创建

1、创建有一条执行语句的触发器

CREATE TRIGGER TRIGGERNAME

BEFORE|AFTER TRIGGER_EVENT

ON TABLE_NAME FOR EACH ROW TRIGGER_STMT

BEFORE和AFTER

参数指定了触发器执行的时间

trigger_EVENT

参数表示了触发事件,即触发器执行条件,包含delete,insert,update;

for each row

参数表示任何一条记录上的操作满足触发事件都会触发触发器;

trigger_stmt

参数表示激活触发器后被执行的语句

例:

创建两个表t_dept和t_diary

create table t_dept(

detpno int,

dname varchar(20),

loc varchar(20)

);

create table t_diary(

diaryno int primary key,

tablename varchar(20),

diarytime datetime

);

desc t_dept;

desc t_diary;

create trigger tri_diarytime

before insert

on t_dept for each row

insert into t_diaty values(null,‘t_dept‘,now());

insert into t_dept values(1,‘cjgongdept‘,‘shanxi‘);

验证:

select * from t_diary;

2、创建包含多条执行语句的触发器

create trigger triggername

before|after trigger_event

on tablename for each row

begin

trigger_stmt

end

在mysql中,一般情况下用";"符号作为语句的结束符,可是在创建触发器的时候,需要用到";"符号作为执行语句的结束符号。为了解决这个问题,可以使用关键字delimiter语句,例如"delimiter$$",可以用来实现将结束符设置成"$$"。

例:

delimiter $$

create trigger tri_diarytime2

after insert

on t_dept for each row

begin

insert into t_diary values(null,‘t_dept‘,now());

insert into t_diary values(null,‘t_dept‘,now());

on

$$

delimiter ;

insert into t_dept values(2,‘cjgongdept‘,‘shanxi‘);

验证:

select * from t_diary;

二、查看

show triggers\G

三、删除

drop trigger triggername

show triggers\G

时间: 2024-12-23 15:51:43

mysql学习笔记之五(触发器)的相关文章

MySQL学习笔记之五 有关数据表操作

MySQL在创建表的时候,创建一个.frm文件保存表和列定义.索引存储在一个有.MYI(MYindex)扩展名的文件并且数据存储在有.MYD(MYData)扩展名的文件中.   一.用SHOW/ DESCRIBE语句显示数据表的信息 语法: SHOW TABLES [FROM db_name] [LIKE wild] or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild] or SHOW INDEX FROM tbl_name [FROM

mysql学习笔记-简介

1.数据存储方式3个阶段 1.人工管理阶段 2.文件系统阶段 3.数据库系统阶段 数据库组成 1.数据库由若干张表组成,表由若干个字段组成 2.关系数据库的表都是二维表 2.数据库泛型(创建数据库必须满足的要求) 1.第一范式(1NF):设计数据库满足的最低要求表中不能有重复字段,并且每个字段不能在拆分 3.数据库技术构成 1.数据库系统 2.sql语句 3.数据库访问技术等 4.sql语言分类 1.DDL(数据定义语言):主要用于创建表,视图,索引,触发器等.其中包括CREATE(创建表),A

MySql学习笔记(转载)

/* 启动MySQL */net start mysql /* 连接与断开服务器 */mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */mysqld --skip-grant-tables-- 修改root密码密码加密函数password()update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- /* 数据库操

马哥Linux学习笔记之五——邮件服务

1.SMTP只负责将邮件发送到服务器,其他的,像身份认证检测邮件,都不能完成.(25/tcp) ESMTP:Extended SMTP POP3:Post Office Protocol IMAP4:Internet Mail Access Protocol 2.Open Relay:开放式中继 就是人家的邮件从这个邮件服务器过,你都帮忙转发,这样就会成为产生垃圾邮件的根源.所以都要关闭Open Relay 3.SASL,Simple Authintication Secure Layer,简单

MySQL学习笔记-基础入门

MySQL学习笔记

MySql学习笔记(一)之DQL常用查询

MySql学习笔记(一)之DQL常用查询 前言:mysql是中小型的数据库软件,SQL语言分为DDL,DCL,DML,DQL四种,在这里重点讲解DQL的单表查询. 正文:在学习mysql单表查询之前,我们先做一些准备工作. 需要安装的软件如下: 1.mysql,版本可以选择5.1或者5.5,安装过程可以参考博客:http://www.cnblogs.com/ixan/p/7341637.html 2.mysql图形化管理软件:Navicate,sqlyog(二选一,推荐使用sqlyog). 本文

MySQL学习笔记-自定义函数

MySQL学习笔记-自定义函数 1.自定义函数简介 自定义函数:用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同 自定义函数的两个必要条件:(1)参数  (2)返回值 自定义函数: 创建自定义函数 CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} routine_body 关于函数体: 1.函数体可以由合法的SQL语句构成: 2.函数体可以是

Mysql学习笔记(三)对表数据的增删改查。

写在前面:(一些牢骚,可以直接跳到分割线后) 太过敏感的人不会快乐,不幸的是我正是这种性格的人. 从培训机构毕业后,迫于经济方面的压力,和当时的班里的一个同学住在了一起,我们在一个公司上班.谁知道这都是不开心生活的源头,从每天早晨开始心情就很糟糕.他是个脾气很慢的人,我是个急脾气,特别是在早上上班的时候.由此种种吧,实在是不胜枚举.算了,还是不说了,太痛苦了,我不太喜欢说别人的坏话.我是学心理学的,已经用各种方法去安慰自己,但是都不太奏效. 回想以往和朋友的交往中,我虽然不算十分合群的人,但绝对

mysql 学习笔记(一)

查询:show databases;show status;show tables; desc  table-name: 更改root密码:方法一:mysqladmin -uroot -poldpassword  password newpassword方法二:mysql -uroot -puse mysqlupdate user set password=password("newpasswd") where user="root";select host,use