mysql - Mysql存储过程创建与TRANSACTION问题
问题描述
我必须创建这样一个程序,但是我得到了错误,我只是通过在其他程序中删除 BEGIN 和 END 来解决它,但是这个程序有 TRANSACTION,我找不到解决方案。
CREATE PROCEDURE sp_device_post_device_status (IN deviceID int(11), IN zone int(11), IN stat int(11))
BEGIN
START TRANSACTION
UPDATE device_statuses
SET is_last_one = 0
WHERE id_device = deviceID
AND is_last_one = 1
AND zoneNo = zone;
INSERT INTO device_statuses (id_device, zoneNo, status, is_last_one)
VALUES (deviceID, zone, stat, 1);
commit
END;
它返回:
SQL query: Copy
CREATE PROCEDURE sp_device_post_device_status (IN deviceID int(11), IN zone int(11), IN stat int(11))
BEGIN
START TRANSACTION
UPDATE device_statuses
SET is_last_one = 0
WHERE id_device = deviceID
AND is_last_one = 1
AND zoneNo = zone
MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE device_statuses
SET is_last_one = 0
WHERE id_device = deviceID
' at line 4
解决方案
我以这种方式解决了
DELIMITER $$ CREATE PROCEDURE sp_device_post_device_status
(IN deviceID int(11), IN zone int(11), IN stat int(11)) BEGIN START TRANSACTION;
UPDATE device_statuses
SET is_last_one = 0
WHERE id_device = deviceID
AND is_last_one = 1
and zoneNo = zone;
insert into device_statuses (id_device, zoneNo, status, is_last_one)
VALUES (deviceID, zone, stat, 1);
commit;
结束$$ DELIMITER ;
推荐阅读
- shell - 使用 grep 查找单词
- angular - 混合反应形式和模板形式
- php - Insert New Row (register) ,同时将“Auto Increment ID”插入另一列
- list - List的MVC自定义序列化
GET请求的参数? - amazon-athena - 为什么双冒号在case语句中不起作用
- javascript - 在 ionic4 中创建动态选项卡时出错
- angular - 覆盖字符串原型函数未在角度库中编译
- python-3.x - 如何将带有单引号和双引号的列表值放入 Postgressql Select Query
- laravel - 从 vue 通过控制器向数据库发送数据时出现 500 服务器错误
- node.js - 当我使用 twitter API 例如 get() 函数时,它不会显示所有文本。我想知道如何将所有文本显示到我的控制台