2011-03-18 64 views
0

是否存储过程,触发器?mysql触发器和存储过程diff

我被要求编写一个mysql脚本文件,并在不支持触发器的服务器上开发数据库。所以我的问题是,因为我不能使用触发器,那么我不能使用存储过程吗?

+0

可能的[存储过程与触发器在MySQL中]重复(http://stackoverflow.com/questions/4171432/stored-procedures-vs-triggers-in-mysql) – 2011-03-18 13:29:08

+0

你可以在触发器中做的所有事情都可以完成在一片杂草中。你可以在杂志中做的所有事情都不能在触发器中完成。 – 2011-03-18 13:39:53

+0

@ f00:我原以为这是另一种方式。触发器有触发事件(插入/更新/删除),增加了存储过程中不可用的一些功能。是的,触发器的本体本质上是一个存储过程,并且每次更改记录时,MySQL中的触发器都会被调用一次,因此从某种意义上说,触发器的“范围”仅限于该记录。不过,我仍然更倾向于说触发器可以完成存储过程所做的所有事情(如果它与该记录无关,通常不会做太多事情)。 – hardmath 2011-03-18 13:51:39

回答

1

您使用的是哪个版本的MySQL?

触发器和存储过程都在5.0中添加,所以如果您使用3.X或4.X,则不能使用触发器或存储过程。

+0

即时通讯使用版本5 – pantelis 2011-03-18 13:50:36

+0

那么为什么你说你的服务器不支持触发器? – 2011-03-18 14:18:42

+0

要清楚,即时通讯新的SQL开发。现在我正在使用工作台版本5.2,但是告诉我,即将执行我的sql脚本的服务器不支持触发器 – pantelis 2011-03-18 15:00:08

2

触发器涉及存储过程(本质上),但并非所有存储过程都是触发器。因此,如果数据库是MySQL的旧版本(根据Ike的答案),两者都不存在。

但是,它可能是您的设计(“开发数据库”)的一般格言不使用触发器。通过将业务逻辑推入数据库的触发器,项目可能会陷入麻烦。是的,有时候可以解决执行复杂表间相关性的难题。但是你的任务可能是做一个或多或少的香草设计,避免在第一次迭代中触发。

存储过程没有那么多的设计风险。它并不试图在业务逻辑中“执行”任何东西,只是(希望)遵守它。存储过程在被调用时运行,因此它基本上充当了一种将脚本存储在数据库中的机制,并且比从客户端连接运行脚本更简单。存储过程可能对设计数据组和报告有用,如果这些都在您的任务范围内。

相关问题