mysql - MySQL存储过程:如果表存在则删除条目
问题描述
我创建了一个存储过程,它应该从某些表中删除数据。
在我的生产数据库上,我有本地数据库中没有的表(不同的模式名称)。
是否有一种优雅的方式来查询数据表的存在以避免异常?也许声明一个错误处理程序来捕获特定错误并应该继续。
CREATE PROCEDURE `deletion`(IN s_id varchar(255))
BEGIN
DECLARE has_error BOOL DEFAULT FALSE;
/* for all other exception there should be a rollback, if table does not exist
then continue*/
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET has_error = TRUE;
START TRANSACTION;
DELETE FROM a WHERE id = s_id;
DELETE FROM b WHERE id = s_id;
DELETE FROM c WHERE id = s_id;
DELETE FROM d WHERE id = s_id;
IF has_error THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END
更新
我试过这个,但这不起作用。即使表存在,条目也不会被删除:
IF EXISTS (SELECT 1 from information_schema.tables
WHERE table_schema = 'a' ) then
DELETE FROM at WHERE id = s_id;
END IF;
提前致谢!
解决方案
推荐阅读
- python - 用包含相同文本的子标签替换beautifulsoup标签的标记文本的优雅方法是什么
- java - 为什么在 Android 中从命令行启动服务需要 root 访问权限(su)?
- c# - 生成 HMAC 签名
- reactjs - 在应用程序和私有库中包含 React 的正确方法是什么?(来自重复 React 的 React Invalid Hook Call 警告)
- nestjs - Nest.js 注入模型?
- php - 如何将 Jquery 提交函数中的值传递给 PHP?
- java - java.sql.SQLException: 用户''@'localhost'的访问被拒绝(使用密码:否)
- python - Python:从网页中解析多个表并在 CSV 中对数据进行分组
- powershell - 如何使用允许自动管道变量 $_ 的脚本块编写 powershell 函数
- sql - 理解具有外键和主键的数据库表引用