Mysql SQL-基于列值删除所有表中的行

Mysql SQL-基于列值删除所有表中的行,mysql,sql,sql-delete,Mysql,Sql,Sql Delete,我有一个MySQL数据库,其中包含数百个表 我需要根据名为“companyId”的公共列删除所有表中的记录——该列存在于数据库的所有表中 如何删除columnId=somenumber的所有表中的所有记录 提前谢谢你 伊凡诺C @SocratesG我尝试了您的存储过程,但在创建SP时得到了以下结果: 错误1064:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在'@TableName VARCHAR128 DECLARE @MyColumn VARCHAR(128); S

我有一个MySQL数据库,其中包含数百个表

我需要根据名为“companyId”的公共列删除所有表中的记录——该列存在于数据库的所有表中

如何删除columnId=somenumber的所有表中的所有记录

提前谢谢你

伊凡诺C

@SocratesG我尝试了您的存储过程,但在创建SP时得到了以下结果:

错误1064:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在'@TableName VARCHAR128

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 table1、table2等

由于所有表中都有一个同名的列,所以我们创建了JOIN,以便可以一次删除100个表中的所有行

3.最后我们得到了条件,比如t1.columnId=1,表1中的意思是检查columnId=1,所以当我们加入时,它会选择100个表中的所有这类行,然后删除它

DELETE FROM table_Name where columnn_name = value ;
范例

DELETE fom students where rll_num = 5 ;
你可以试试这个

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

使用正确的外键设置您的表!我有一个MySQL数据库,有几百个表,所以我需要通过批处理删除所有表中基于名为“companyId”的公共列的记录,而不是逐表删除名为“companyId”的公共列的记录?100个表中的列名相同吗?是的,我有几百个表,所有表中都有一个名为“companyId”的列,我不明白-基本的删除语法是从表名中删除,其中一些列=一些值;我非常害怕表,那么t1和t2是什么呢?首先尝试查询,我尝试了,它成功了,我解释了答案,等了4分钟。我有一个MySQL数据库,有数百个表,所以我需要通过批处理删除所有表中基于名为“companyId”的公共列的记录,不是逐表的我有一个MySQL数据库,有几百个表,所以我需要通过批处理删除所有表中基于名为“companyId”的公共列的记录,不是逐表的我会尝试,但什么是“你可以使用你自己的值?”你是指与我要删除的记录匹配的值?是的,在那里写下与要删除的记录匹配的值。我会再试几次!对不起,耽搁了
DELETE FROM table_Name where columnn_name = value ;
DELETE fom students where rll_num = 5 ;
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