Sql Mariadb StoredProcess是否始终需要启动事务?
我有一个mariadb数据库和一个存储过程。如果select语句为true,则执行删除查询。像这样:Sql Mariadb StoredProcess是否始终需要启动事务?,sql,stored-procedures,transactions,mariadb,Sql,Stored Procedures,Transactions,Mariadb,我有一个mariadb数据库和一个存储过程。如果select语句为true,则执行删除查询。像这样: START TRANSACTION; # Test if category is in use by a product and IN_category_uuid is an input variable IF ((SELECT COUNT(id) FROM products WHERE categoryId = IN_category_uuid) = 0) THEN D
START TRANSACTION;
# Test if category is in use by a product and IN_category_uuid is an input variable
IF ((SELECT COUNT(id) FROM products WHERE categoryId = IN_category_uuid) = 0) THEN
DELETE FROM category WHERE id = IN_category_uuid;
COMMIT;
SET OUT_result = 0;
ELSE
ROLLBACK;
SET OUT_result = 2;
END IF;
我的问题是,我是否需要将start事务放在select语句的开头,或者是否可以执行以下操作
# Test if category is in use by a product
IF ((SELECT COUNT(id) FROM products WHERE categoryId = IN_category_uuid) = 0) THEN
START TRANSACTION;
DELETE FROM category WHERE id = IN_category_uuid;
COMMIT;
SET OUT_result = 0;
ELSE
SET OUT_result = 2;
END IF;
第二个代码不需要回滚,只在alter命令完成时启动事务。如果,为什么要使用
?只需这样写:
DELETE FROM category
WHERE id = IN_category_uuid AND
NOT EXISTS (SELECT 1 FROM products p WHERE p.categoryId = IN_category_uuid);
您可能不需要将其包装到事务中,但这可能取决于数据库的设置。一般来说,单个命令将位于其自己的事务中(实际上没有太多可回滚的内容)