mysql中的存储过程和触发器

时间:2013-12-19 12:43:08

标签: mysql sql stored-procedures triggers sequence

我正在尝试运行一个将数据插入表的存储过程。在表中,添加后会有一个触发器会更新序列表(MySQL DB中没有序列)

这是我的存储过程:

DELIMITER $$

CREATE DEFINER=`dbName`@`%` PROCEDURE `insertGuide`(m_name varchar(45)  ,m_last varchar(45) ,addres varchar(45) ,mphone int)
BEGIN

INSERT INTO `guides` (`id`, `name`, `lastName`, `address`, `phone`)
select max(id)+1, m_name, m_last, addres, mphone
from seq;

END

这是我的触发器:

USE `dbName`;
DELIMITER $$

CREATE DEFINER=`dbName`@`%` TRIGGER 
    guidesUpdate
AFTER INSERT ON
    guides
FOR EACH ROW
    BEGIN
        INSERT INTO seq VALUES ();
    END

当我跑

call insertGuide('a'  ,'aa' ,'aaa' ,'12333')

它会返回错误:

  

错误代码:1442。无法更新存储的函数/触发器中的表'seq'   因为它已被调用此存储的语句使用   功能/触发。

我能为此做些什么吗?

1 个答案:

答案 0 :(得分:0)

你能做的最好的事情就是完全消除这个触发器。如果你想在表上有一个自动递增的id,那么只需在create table语句中定义它:

create table guides as (
    id int not null auto_increment primary key,
    . . .
);