【发布时间】:2021-05-26 11:47:15
【问题描述】:
我创建了一个过程,在该过程中我创建了一个临时表来存储列的值,然后我想使用这些列值来删除其他表中的数据。 如何在 while 循环中执行此操作,或者我可以使用 join 从 AppCoverLetter 中删除行,AppError 哪种方式更好?
CREATE DEFINER=`root`@`localhost` PROCEDURE `gdpr_delete`(_email_ varchar(128))
BEGIN
DECLARE NumberRecords int;
DECLARE RowCount int ;
-- Create a temporary table, note the IDENTITY
-- column that will be used to loop through
-- the rows of this table
CREATE TABLE GdprDeleteData (AppId INT NOT null);
-- Insert the resultset we want to loop through
-- into the temporary table
INSERT INTO GdprDeleteData (AppId) SELECT AppId FROM ApplyData.AppFormData where lower(Email) = lower(_email_);
-- Get the number of records in the temporary table
SET NumberRecords = ROW_COUNT();
SET RowCount = 1;
select NumberRecords, RowCount;
-- loop through all records in the temporary table
-- using the WHILE loop construct
start transaction;
DELETE AppCoverLetter FROM AppCoverLetter inner JOIN GdprDeleteData ON AppCoverLetter.AppID = GdprDeleteData.AppId;
DELETE AppError FROM AppError inner JOIN GdprDeleteData ON AppError.AppID = GdprDeleteData.AppId;
DELETE AppFormData FROM AppFormData inner JOIN GdprDeleteData ON AppFormData.AppID = GdprDeleteData.AppId;
DELETE AppJobData FROM AppJobData inner JOIN GdprDeleteData ON AppJobData.AppID = GdprDeleteData.AppId;
DELETE AppTrackingData FROM AppTrackingData inner JOIN GdprDeleteData ON AppTrackingData.AppID = GdprDeleteData.AppId;
DELETE FlowLog FROM FlowLog inner JOIN GdprDeleteData ON FlowLog.AppID = GdprDeleteData.AppId;
DELETE App FROM App inner JOIN GdprDeleteData ON App.AppID = GdprDeleteData.AppId;
DELETE AppCoverLetter FROM AppCoverLetter inner JOIN GdprDeleteData ON AppCoverLetter.AppID = GdprDeleteData.AppId;
DELETE AppResume FROM AppResume inner JOIN GdprDeleteData ON AppResume.AppID = GdprDeleteData.AppId;
commit;
-- drop the temporary table
drop table GdprDeleteData;
END
【问题讨论】:
-
你有什么问题? ..你有一个错误??显示错误消息..错误的结果更新您的问题添加正确的数据样本和预期的结果
-
我想知道当前使用连接删除哪种方式更好,或者我应该使用while循环进行操作
标签: mysql stored-procedures mysql-workbench