mysql - 如何从不同的表中获取 MySQL 中最后插入的行?
问题描述
我的数据库中有很多不同的表,我需要以某种方式从这些表中获取最后插入的行。就像社交网络提要一样。此外,这些表的名称不是随机的,而是未知的,因为它们都是由用户生成的。
例如:我有表:A、B、C 和 D,每个表中有 5k 行。我需要以某种方式从这些表中获取最后一行并使其排序id
,就像我们在一个简单的查询中所做的那样:"SELECT * FROM table A ORDER BY id DESC"
,但我正在寻找类似的东西:"SELECT * FROM A,B,C,D ORDER BY id DESC"
。
表具有相同的结构。
解决方案
如果每个表的 id 单独计算,则不能按 ID 排序,因此您需要计算全局 id 并在所有表上使用它。
你可以这样做:
假设您有 2 个表 A,B:
Create Table A(id int NOT NULL auto_increment, name varchar(max), value varchar(max), PRIMARY_KEY(id));
Create Table B(id int NOT NULL auto_increment, name varchar(max), value varchar(max), PRIMARY_KEY(id));
添加另一个以 id 作为自动增量主键的表 IDS。
Create table IDS (id int NOT NULL auto_increment, ts Timestamp default CURRENT_TIMESTAMP, PRIMARY_KEY(id));
对于所有表的 id 列,现在应该使用 IDS 表中的 id 作为外键,而不是自动递增。
Create Table A(id int NOT NULL auto_increment, name varchar(max), value varchar(max), PRIMARY_KEY(id),CONSTRAINT fk_A_id FOREIGN KEY(id) REFERENCE IDS(id) ON DELETE CASCADE ON UPDATE CASCADE);
Create Table B(id int NOT NULL auto_increment, name varchar(max), value varchar(max), PRIMARY_KEY(id),CONSTRAINT fk_A_id FOREIGN KEY(id) REFERENCE IDS(id) ON DELETE CASCADE ON UPDATE CASCADE);
对于在插入触发器之前添加的每个表,触发器应首先向 IDS 表插入行并插入LAST_INSERT_ID
该表。
Create TRIGGER befor_insert_A BEFORE INSERT On A
FOR EACH ROW
BEGIN
insert into IDS() values ();
set new.id = LAST_INSERT_ID();
END
Create TRIGGER befor_insert_B BEFORE INSERT On B
FOR EACH ROW
BEGIN
insert into IDS() values ();
set new.id = LAST_INSERT_ID();
END
现在您可以使用 union all 从所有表创建视图,v 的行现在可以按 id 排序并给出插入的 cronlogic 顺序。
Create view V AS select * from A UNION ALL select * from B
例如,您可以在 V 上查询最新的 10 个 id:
select * from V Order by id desc LIMIT 10
其他选项是为每个表添加时间戳并按时间戳对视图进行排序。
推荐阅读
- python - 为什么它会忽略我在 for 循环中的继续?
- c# - 将 Json 数据流式传输到 ASP.NET ApiController
- javascript - 通过从本地文本文件中获取第 N 行来定义 NodeJS 文件中的字符串变量?
- reactjs - 如果使用上下文 API,我是否使用 PropTypes
- typescript - 配置服务.get
('key') 在类型转换和验证时失败 - c++ - 数组元素改变值?
- python - 当 LSTM 层的输入数量大于或小于该层中 LSTM 单元的数量时,Keras 会做什么?
- python - 如何从 Blender python 触发脚本节点更新?
- android - View.GONE 留下空白空间
- amazon-web-services - 是否有用于可视化其他 AWS 服务之间的触发器的 AWS 服务