MySQL存储过程更新表和删除相关

标签 mysql stored-procedures

假设我的 MySQL 数据库中有两个相互关联的表 AB:

create table A (
id int(11) not null auto_increment, 
name varchar(45),
is_archived TINYINT(1), 
create_date datetime)

create table B (
id int(11) not null auto_increment,
a_id int(11),
name varchar(45)

如何使用存储过程来检查表 A 中的项目,如果 create_date 早于某个值(例如 DATEDIFF(NOW(), a.create_date) >30 ),则更新该项目在表A中为a.is_archived =1,然后删除表B中与此项目相关的项目。

最佳答案

我猜你的存储过程看起来像:

//update table1
UPDATE A SET is_archived = 1 
WHERE DATEDIFF(NOW(), create_date) >30

//remove from table2
UPDATE B INNER jOIN A 
ON A.id = B.a_id SET DELETED = 1 
WHERE DATEDIFF(NOW(), a.create_date) >30

或者,如果您想从表中删除行,请将 UPDATE 替换为 DELETE

关于MySQL存储过程更新表和删除相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49231660/

相关文章:

mysql - 获取同一表/列上不同购买类型的计数和总和

tsql - 如何防止 SQL 注入(inject)

sql - 从存储过程返回游标

MySQL - 锁定表或从触发器开始事务

mysql - 如何从存储过程发出 00000(成功)的 sqlstate 信号?

mysql - 创建过程时,您的 SQL 语法有误。数据库

java - Spring MVC中如何将bean中的数据插入数据库?

php - mysql SUM 列

php - 限制从 SQL 数据库中提取的行数并组织成页面

php - mysql调用存储过程报错