是一个mysql临时表,每个用户访问创建它的脚本是唯一的...?

时间:2010-03-16 12:25:56

标签: mysql temp-tables

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

但即使在mysql手册中也没有回答某些问题....比如...

  1. 临时表对于执行脚本的每个用户都是唯一的吗?或者当两个不同的用户同时运行脚本时它会被覆盖......

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

  3. 感谢您的澄清......

    我就是这样做的....

    $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'";
    

1 个答案:

答案 0 :(得分:30)

引用MySQL manual page of CREATE TABLE

  

您可以在何时使用TEMPORARY关键字   创建一个表。
一张TEMPORARY表是   仅对当前可见   连接,被删除   连接时自动   封闭即可。
这意味着两个不同   连接可以使用相同的临时   表名没有冲突   彼此或与现有的   非同名的同名表。

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

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