我已经查看了此处关于此的其他问题。它不起作用。
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `environment_admin`(
IN environment_id TEXT,
IN user_id TEXT,
IN username VARCHAR(75),
IN password VARCHAR(512)
)
BEGIN
DECLARE env_id INT;
DECLARE admin_id INT;
SET env_id = CAST(environment_id AS SIGNED INT);
SET admin_id = CAST(user_id AS SIGNED INT);
IF NOT EXISTS(SELECT 1 FROM `environment`.`environment_accounts` WHERE environment_id = env_id AND user_id = admin_id) THEN
BEGIN
INSERT INTO
`environment`.`environment_accounts`
(
`environment_id`,
`user_id`,
`username`,
`password`,
`is_active`,
`is_admin`,
`is_mod`
)
VALUES
(
env_id,
admin_id,
username,
password,
1,
1,
1
);
END;
END IF;
END
所以如果我运行:
CALL `environment`.`environment_admin`('22','1','kacieh','512c9ad228332bbd30d09ce7ffb8896e00a1610e914a5fa180bf15ce702b90423e6a9540579f672315ae3c6cb1b8d06ee2b784b4761e806675aa88c2a915553e');
我有 0 行受到影响 果然,什么也没发生。 -_- 我一直在工作这个时间 我测试了条件查询,它有效。 我只测试了存储过程中的插入语句,它也能正常工作。
最佳答案
别再这样做了,效率很低,如果同时运行两个 insert 会更糟! :)
在重复 key 更新时使用插入.... see here
一个技巧是做 ON DUPLICATE KEY UPDATE environment_id = env_id(不更改列,因此不会更新任何内容,确保 INSERT 不会在没有任何错误情况的情况下工作,您可以在那之后检查修改/插入的行数)
关于MySQL 过程检查记录是否在插入不工作之前存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12189968/