我有一个包含数百个表的 MySQL 数据库。
我需要删除基于名为“companyId”的公共列的所有表中的记录 - 该列存在于数据库的所有表中。
如何删除所有表中columnId = somenumber 的所有记录?
提前谢谢您!
伊万诺·C.
@SocratesG 我尝试了您的存储过程,但我得到以下创建 SP 的信息:
ERROR 1064:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 '@TableName VARCHAR(128); 附近使用的正确语法。
DECLARE @MyColumn VARCHAR(128);
SET @MyColumn = 'compan' at line 4
SQL Statement:
CREATE PROCEDURE `deletePortalInstance` ()
BEGIN
DECLARE @TableName VARCHAR(128);
DECLARE @MyColumn VARCHAR(128);
SET @MyColumn = 'companyId'
DECLARE MyCursor CURSOR FOR
(SELECT OBJECT_NAME(c.id) AS ObjectName
FROM dbo.syscolumns c
WHERE OBJECTPROPERTY(c.id,'ISTABLE') = 1 --Search for tables only
AND c.name = @MyColumn)
OPEN MyCursor
FETCH NEXT FROM MyCursor into @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC('DELETE '+@MyColumn+' FROM '+@TableName+' WHERE '+@MyColumn+' = 906454')
FETCH NEXT FROM MyCursor into @TableName
END
CLOSE MyCursor
DEALLOCATE MyCursor
END
DELETE FROM companyId where columnId = 1
DECLARE @TableName VARCHAR(128);
DECLARE @MyColumn VARCHAR(128);
SET @MyColumn = 'MyColumnName'
DECLARE MyCursor CURSOR FOR
(SELECT OBJECT_NAME(c.id) as ObjectName
FROM dbo.syscolumns c
WHERE
OBJECTPROPERTY(c.id,'ISTABLE') = 1 --Search for tables only
AND c.name = @MyColumn)
OPEN MyCursor
FETCH NEXT FROM MyCursor into @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC
(
'DELETE ' + @MyColumn
+' FROM ' + @TableName
+' WHERE ' + @MyColumn + ' <= 1000'
)
FETCH NEXT FROM MyCursor into @TableName
END
CLOSE MyCursor
DEALLOCATE MyCursor
DELETE FROM <tblName> where columnId = <Your Column Id val>
但我认为您使用外键来使用参照完整性约束并使用
删除级联
根据您的新信息,
更新:
DELETE t1, t2
FROM <table1> t1
JOIN <table2> t2 ON t1.columnId = t2.columnId
WHERE t1.columnId = <Your Column Value>
说明:
DELETE FROM table1,table2
等
JOIN
,因此可以一次删除 100 个表中的所有行。
WHERE t1.columnId = 1
这样的条件,意味着在table1中,检查columnId = 1,所以当我们加入时,它会选择100个表中的所有此类行,然后删除它。
DELETE FROM table_Name where columnn_name = value ;
示例
DELETE fom students where rll_num = 5 ;