提问人:Zaper127 提问时间:2/21/2017 最后编辑:Zaper127 更新时间:11/18/2023 访问量:21322
检查表是否存在后从表中删除
Delete from a table after checking if it exists
问:
在SQL中删除一行之前,我需要检查表是否存在。我在互联网上尝试了几件事,这似乎是出现的最多,但它不起作用。
IF OBJECT_ID('mytable', 'N') IS NOT NULL
BEGIN
DELETE FROM table WHERE user_id= :user_id
END
我收到错误:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF OBJECT_ID('we_image_gallery', 'U') IS NOT NULL DELETE FROM mytable' at line 1
我需要一个仅使用当前数据库的解决方案,并且当脚本移植到多个系统时,我可以指望。
编辑:此查询由 PHP PDO 运行。似乎没有一个答案有效,是否有可能我的 pdo 或 sql 服务器中有一个设置导致了这个问题?
答:
0赞
Mansoor
2/21/2017
#1
Using Exists statement to delete data from table:
IF EXISTS(SELECT 1 FROM Your_table WHERE user_id = user_id)
BEGIN
DELETE FROM Your_table WHERE user_id= user_id
END
Delete table from database :
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA =
'TheSchema' AND TABLE_NAME = 'TheTable')
BEGIN
--Your delete statement
END
0赞
Pranav_Systematix
2/21/2017
#2
您可以INFORMATION_SCHEMA办理入住手续。通过在 where 子句中提供表名来为任何表提供 TABLES,如果该表存在,则可以执行所需的操作,如下所示:
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = N'tbl_User')
BEGIN
--If table exist you can perform your operation here
-- DELETE FROM table WHERE user_id= :user_id
Print 'Table Exists'
END
0赞
Bill Karwin
2/22/2017
#3
MySQL 不支持动态 SQL 解析器中的语句。只能在存储例程或触发器的主体中使用此类流控制语句。IF
我在这里建议两种策略之一。一种选择是简单地尝试像 DELETE 这样的语句,但检查错误。或者,如果已启用 PDO 异常,则捕获异常。
try {
$pdo->exec("DELETE ...");
} catch (PDOException $e) {
error_log("SQL statement on $mytable failed: ".$e->getMessage());
}
mytable 上的 SQL 语句失败:SQLSTATE[42S02]:找不到基表或视图:1146 表“test.mytable”不存在
另一种策略是查询该表,如果它存在/不存在,则执行某些操作。
try {
$stmt = $pdo->query("SHOW TABLES LIKE 'mytable'");
if (!$stmt->fetchColumn()) {
error_log("No such table 'mytable'");
}
} catch (PDOException $e) {
echo "SQL statement failed: " . $e->getMessage() . "\n";
}
评论