【问题标题】:is a mysql temporary table unique for each user accessing the script that creates it...?对于每个访问创建它的脚本的用户来说,mysql 临时表是唯一的吗?
【发布时间】:2025-12-01 03:35:01
【问题描述】:

在寻找一种方法来临时保存搜索结果时,当用户在特定日期之间搜索免费酒店时,我遇到了临时表。

但某些问题即使在 mysql 手册中也没有得到解答......就像......

  1. 对于执行脚本的每个用户来说,临时表是否都是唯一的...?还是会在两个不同的用户同时运行脚本时被覆盖...?

  2. 表什么时候销毁..?当用户关闭浏览器窗口或只是导航离开运行脚本的页面时......?

感谢您的澄清...

这就是我的做法......

$table = "CREATE OR REPLACE TEMPORARY TABLE $free_room(
              room_id INT(5),
              room_name VARCHAR(150),
              max_persons INT(1),
              rooms_free INT(1),
              room_price INT(6),
              hotel_id INT(4),
              hotel_name VARCHAR(100),
              hotel_stars INT(1),
              hotel_type INT(1)) ENGINE=MEMORY";

    $query_getFreeRooms = "INSERT INTO  $free_room
                           SELECT $rooms.room_id,
                                  $rooms.room_name,
                                  $rooms.max_persons,
                                  $rooms.total_rooms - $rooms.booked_rooms AS rooms_free,
                                  $rooms.room_price,
                                  $hotels.hotel_id,
                                  $hotels.hotel_name,
                                  $hotels.hotel_stars,
                                  $hotels.hotel_type
                           FROM   $hotels,$rooms
                           WHERE  $rooms.room_id NOT IN (SELECT room_id
                                                         FROM   $reservations
                                                         WHERE  $dateCheck)
                           AND    $hotels.hotel_city = '$city_search1'
                           AND    $hotels.hotel_id = $rooms.hotel_id
                           AND    $hotels.hotel_deleted = '0'
                           AND    $rooms.room_deleted = '0'";

【问题讨论】:

    标签: mysql temp-tables


    【解决方案1】:

    引用 MySQL manual page of CREATE TABLE

    您可以在以下情况下使用TEMPORARY 关键字 创建一个表。
    TEMPORARY 表是 只对当前可见 连接,并且 被丢弃 连接成功时自动 关闭
    这意味着两个不同的 连接可以使用相同的临时 表名不冲突 彼此或与现有的 同名的非 TEMPORARY 表。

    考虑到两个用户将有两个不同的连接,该表对于每个用户都是唯一的。

    当创建它的连接关闭时,临时表将被删除——至少在 PHP 中,这意味着当生成页面的脚本结束时 (因此,通常,甚至在用户实际阅读页)

    【讨论】:

    • 但是当我在线测试时,第一个用户创建的表仍然可供所有在他之后访问它的用户使用......!!!不会为每个用户创建一个新表...
    • 那么也许您正在以某种方式使用连接池?
    • 连接池...作为一个新人我不知道这个概念..我会先查一下..
    • 它有效.. 必须稍微调整一下代码... 运行起来.. 感谢您的回复,Martin... +1 并接受了答案..
    • 所以我看到您可以创建一个与永久表同名的临时表,我对其进行了测试和工作。但是如何在后续的 sql 语句中指定我想要的表。手册继续:在删除临时表之前隐藏现有表。
    最近更新 更多