存储过程和外键检查

时间:2017-08-14 13:54:28

标签: mysql sql stored-procedures phpmyadmin

我正在尝试创建一个存储过程来将数据插入到我的连接表中,该表包含两个外键(一个用于成员,一个用于中心)

使用直接SQL(通过phpmyadmin)我可以更改表中的值,但是使用存储过程我只会得到错误:1452。

如何在不导致错误的情况下写入表,并且不完全禁用外键约束。我知道没有什么可以阻止人们输入错误的值,这个想法是用户界面最终会阻止它。但是,如果在数据库中有更好的方法,我很乐意听到它。

有效的sql是:

 INSERT INTO `tblmembers_has_tblcentres` (`tblMembers_MemberID`, 
 `tblCentres_CentreID`, `DateMemberJoinedCentre`) VALUES ('92', '2', 
 CURRENT_TIMESTAMP);

我的商店程序如下:

CREATE DEFINER=`root`@`localhost` PROCEDURE `Add_Memb_to_Centre`(IN `iMember` 
INT, IN `iCentre` INT)
    SQL SECURITY INVOKER
INSERT INTO `tblmembers_has_tblcentres` (`tblMembers_MemberID`, 
`tblCentres_CentreID`, `DateMemberJoinedCentre`) VALUES ('iMember', 'iCentre', 
CURRENT_TIMESTAMP)

1 个答案:

答案 0 :(得分:1)

您正在尝试插入字符串值"iMember""iCentre"而不是其变量内容。继续使用反引号:

CREATE DEFINER=`root`@`localhost` PROCEDURE `Add_Memb_to_Centre`(IN `iMember` 
INT, IN `iCentre` INT)
    SQL SECURITY INVOKER
INSERT INTO 
    `tblmembers_has_tblcentres` 
    (
       `tblMembers_MemberID`, 
       `tblCentres_CentreID`, 
       `DateMemberJoinedCentre`
    ) 
    VALUES ('iMember', 'iCentre', CURRENT_TIMESTAMP) -- WRONG
    VALUES (`iMember`, `iCentre`, CURRENT_TIMESTAMP) -- CORRECT