MySQL:触发器

转载 2015年11月18日 12:18:18
【例11.1】在t表格上创建一个名为view_t的视图,代码如下:
首先创建基本表并插入数据,语句如下:
CREATE TABLE t (quantity INT, price INT);
INSERT INTO t VALUES(3, 50);
创建视图语句为:
CREATE VIEW view_t AS SELECT quantity, price, quantity *price FROM t;

SELECT * FROM view_t;

【例11.2】在t表格上创建一个名为view_t2的视图,代码如下:
 CREATE VIEW view_t2(qty, price, total ) AS SELECT quantity, price, quantity *price FROM t;
语句执行成功,查看view_t2视图中的数据:
 SELECT * FROM view_t2;
【例11.3】在表student和表stu_info上创建视图stu_glass,代码如下:
首先向两个表中插入数据,输入语句如下:
 INSERT INTO student VALUES(1,'wanglin1'),(2,'gaoli'),(3,'zhanghai');


 INSERT INTO stu_info VALUES(1, 'wuban','henan'),(2,'liuban','hebei'),(3,'qiban','shandong');

CREATE VIEW stu_glass (id,name, glass) AS SELECT student.s_id,student.name ,stu_info.glass
FROM student ,stu_info WHERE student.s_id=stu_info.s_id;

 SELECT * FROM stu_glass;

【例11.4】通过DESCRIBE语句查看视图view_t的定义,代码如下:
DESCRIBE view_t;
代码执行如下:
 DESCRIBE view_t;

【例11.5】下面将通过一个例子来学习使用SHOW TABLE STATUS命令查看视图信息,代码如下:
SHOW TABLE STATUS LIKE 'view_t' \G

执行结果显示,表的说明Comment的值为VIEW说明该表为视图,其他的信息也为NULL说明这是一个虚表。用同样的语句来查看一下数据表t的信息,执行结果如下:
 SHOW TABLE STATUS LIKE 't' \G

【例11.6】SHOW CREATE VIEW查看视图的详细定义,代码如下:
SHOW CREATE VIEW view_t \G

【例11.7】在views表中查看视图的详细定义,代码如下:
 SELECT * FROM information_schema.views\G

【例11.8】修改视图view_t,代码如下:
CREATE OR REPLACE VIEW view_t AS SELECT * FROM t;
首先通过DESC查看一下更改之前的视图,以便与更改之后的视图进行对比。执行的结果如下:
 DESC view_t;

 CREATE OR REPLACE VIEW view_t AS SELECT * FROM t;

 DESC view_t;

【例11.9】使用ALTER语句修改视图view_t,代码如下:
ALTER VIEW view_t AS SELECT quantity FROM t;
执行结果如下:
 DESC view_t;
+----------+---------+------+-----+---------+-------+
| Field   | Type  | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| quantity | int(11) | YES |     | NULL |      |
| price   | int(11) | YES |     | NULL |      |
+----------+---------+------+-----+---------+-------+
2 rows in set (0.06 sec)

 ALTER VIEW view_t AS SELECT quantity FROM t;
Query OK, 0 rows affected (0.05 sec)

 DESC view_t;
+--------+--------------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| quantity| int(11)    | YES |     | NULL |     |
+-------+---------------+------+-------+--------+-------+

【例11.10】使用UPDATE语句更新视图view_t,代码如下:
UPDATE view_t SET quantity=5;
执行视图更新之前,查看基本表和视图的信息,执行结果如下:
 SELECT * FROM view_t;
+----------+
| quantity |
+----------+
|      3 |
+---------+
1 row in set (0.00 sec)

 SELECT * FROM t;
+--------+-------+
| quantity| price |
+--------+-------+
|     3 |   50 |
+--------+-------+
1 row in set (0.00 sec)

使用UPDATE语句更新视图view_t,执行过程如下:
 UPDATE view_t SET quantity=5;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

查看视图更新之后,基本表的内容:
 SELECT * FROM t;
+----------+-------+
| quantity | price |
+----------+-------+
|      5 |    50 |
+----------+-------+
1 row in set (0.02 sec)

  SELECT * FROM view_t;
+----------+
| quantity |
+----------+
|       5 |
+----------+
1 row in set (0.00 sec)

  SELECT * FROM view_t2;
+------+-------+-------+
| qty  | price | total |
+------+-------+-------+
|   5 |    50 |  250 |
+------+-------+-------+
1 row in set (0.00 sec)
对视图view_t更新后,基本表t的内容也更新了,同样当对基本表t更新后,另外一个视图view_t2中的内容也会更新。
【例11.11】使用INSERT语句在基本表t中插入一条记录,代码如下:
INSERT INTO t VALUES (3,5);
执行结果如下:
 INSERT INTO t VALUES(3,5);
Query OK, 1 row affected (0.04 sec)

 SELECT * FROM t;
+----------+-------+
| quantity | price |
+----------+-------+
|      5 |   50 |
|      3 |    5 |
+----------+-------+
2 rows in set (0.00 sec)

 SELECT * FROM view_t2;
+------+-------+-------+
| qty  | price | total |
+------+-------+-------+
|   5 |    50 |  250 |
|   3 |     5 |   15 |
+------+-------+-------+
2 rows in set (0.00 sec)
向表t中插入一条记录,通过SELECT查看表t和视图view_t2,可以看到其中的内容也跟着更新,视图更新的不仅仅是数量和单价,总价也会更新。
【例11.12】使用DELETE语句在删除视图view_t2中的一条记录,代码如下:
DELETE FROM view_t2 WHERE price=5;
执行结果如下:
 DELETE FROM view_t2 WHERE price=5;
Query OK, 1 row affected (0.03 sec)
 SELECT * FROM view_t2;
+------+-------+-------+
| qty  | price | total |
+------+-------+-------+
|   5 |    50 |  250 |
+------+-------+-------+
1 row in set (0.00 sec)

 SELECT * FROM t;
+----------+-------+
| quantity | price |
+----------+-------+
|      5 |    50 |
+----------+-------+

【例11.13】删除stu_glass视图,代码如下:
DROP VIEW IF EXISTS stu_glass;
执行结果:
 DROP VIEW IF EXISTS stu_glass;
Query OK, 0 rows affected (0.00 sec)
如果名称为stu_glass的视图存在,该视图将被删除。使用SHOW CREATE VIEW语句查看操作结果:
 SHOW CREATE VIEW stu_glass;
ERROR 1146 (42S02): Table 'chapter11db.stu_glass' doesn't exist

可以看到,stu_glass视图已经不存在,删除成功。


综合案例

步骤1:创建persons表
CREATE TABLE persons (name VARCHAR(40), num int);

步骤2:创建一个销售额表sales
CREATE TABLE sales (name VARCHAR(40), sum int);

步骤3:创建一个触发器
CREATE TRIGGER num_sum AFTER INSERT ON persons
FOR EACH ROW INSERT INTO sales VALUES (NEW.name,7*NEW.num);

步骤4:向persons表中插入记录
INSERT INTO persons VALUES ('xiaoxiao',20),('xiaohua',69);

SELECT * FROM persons;
SELECT *FROM sales;


MySQL——触发器的创建和使用总结

什么是触发器 触发器(TRIGGER)是MySQL的数据库对象之一,从5.0.2版本开始支持。该对象与编程语言中的函数非常类似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,...
  • Goskalrie
  • Goskalrie
  • 2016年11月03日 13:34
  • 23688

什么是MySQL触发器

MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。利用MySQL触发器可以对表进行增、删、改操作同时响应另一张表做出相同的操作。下面简单介绍一下MySQL触发器的基本语法。 如何创建...
  • dongsg11200
  • dongsg11200
  • 2013年08月16日 23:33
  • 2873

mysql只导出触发器及导入

导出: mysqldump -uroot -proot --opt -t -d --all-databases >trigger.sql --no-data,-d 不导出任何数据,只导出...
  • qdulgh
  • qdulgh
  • 2016年11月21日 20:24
  • 1462

mysql里面的触发器管理

定时炸弹---触发器
  • rocky1996
  • rocky1996
  • 2017年07月18日 10:18
  • 257

MySQL5.6 触发器的使用(条件分支、变量的使用)

use fs; /*product_info表中,仪器和试剂一定是不同的产品,id上不可能重复,可以放心删*/ create trigger check_record_delete_tri...
  • zhouyingge1104
  • zhouyingge1104
  • 2014年07月07日 20:11
  • 24425

关于mysql触发器的介绍

1. 触发器的介绍 触发器是一个特殊的存储过程,不同的是存储过程要用CALL来调用,而触发器不需要使用CALL也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MYSQL自动调用。 触...
  • qq_35347459
  • qq_35347459
  • 2017年04月27日 15:39
  • 875

mysql 触发器和事件

触发器例子 drop trigger if exists ttest; delimiter || create trigger ttest after insert on testa for ...
  • spiderlily
  • spiderlily
  • 2014年03月27日 15:39
  • 3582

paip. mysql如何临时 暂时 禁用 关闭 触发器

paip. mysql如何临时 暂时 禁用 关闭 触发器 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://bl...
  • attilax
  • attilax
  • 2013年08月31日 01:28
  • 4899

mysql触发器作用,好处和curl

什么是触发器:       触发器是一种特殊的存储过程,它在试图更改触发器所保护的数据时自动执行。 触发器有什么作用:         1.安全性。可以基于数据库的值使用户具有操作数据库的某种权利。 ...
  • jitongliang
  • jitongliang
  • 2017年08月12日 11:33
  • 247

mysql触发器不起作用 navicat的bug?

触发器内容: #type =2 全场竞猜 对应 flow 表中的type = 2 消费 category = 51 竞猜支出 Begin #获取字典表的下注标识A or B SET @a_descri...
  • Angry_Mills
  • Angry_Mills
  • 2017年03月27日 09:21
  • 822
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL:触发器
举报原因:
原因补充:

(最多只允许输入30个字)