該如何建立暫存的資料表呢?!

edited 十月 2013 in 資料庫
請問各位大大
該如何用MYSQL建立暫存的資料表呢?!
我的程式語言是PHP
我查過許多的網頁及書本
可是都沒看到有在講解建立 暫存 的資料表
請各位大大幫幫我的忙
感激不盡!!

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=2971

評論

  • edited 十一月 2007
    不太明白所謂的 暫存 的資料表
    是什麼意思?

    如果是新增資料表
    那就用 create table 語法就可以了吧
  • edited 十一月 2007
    說到暫存資料表,讓我聯想到儲存在記憶體的資料表,一般mysql用的資料表是myisam,但存在記憶體的這種是屬於memory或heap,速度很快,但電腦關機資料就沒了,假如你是指要這種的話,那只要在建立資料表時將格式換成heap或memory即可
  • edited 十一月 2007
    像這樣嗎?
    SELECT TEMPORARY TABLE tmpnav AS SELECT * FROM fundnav;
    

    mysql的文件應該有說明。還是你要別的?
  • edited 十一月 2007
    補充一下temporary table的限制,從文件上抄來的:

    The following list indicates limitations on the use of TEMPORARY tables:

    * A TEMPORARY table can only be of type HEAP, ISAM, MyISAM, MERGE, or InnoDB.

    * You cannot refer to a TEMPORARY table more than once in the same query. For example, the following does not work:

    mysql> SELECT * FROM temp_table, temp_table AS t2;
    ERROR 1137: Can't reopen table: 'temp_table'

    * The SHOW TABLES statement does not list TEMPORARY tables.

    * You cannot use RENAME to rename a TEMPORARY table. However, you can use ALTER TABLE instead:

    mysql> ALTER TABLE orig_name RENAME new_name;
  • edited 十一月 2007
    感謝大大的回覆
    我的意思就是treble大大所說的
    要存在記憶體的資料表
    趕緊去試試看了~~
    真的非常謝謝各位大大熱心的回覆!!
    抱歉
    再問一下
    請問
    heap和memory
    是否有不同之處呢?!
  • edited 十一月 2007
    一樣。

    4.1之前叫做heap,之後叫做memory。
  • edited 十一月 2007
    謝謝大大~
    所以他們兩個都是同樣的東西囉~感謝
    對了~不好意思喔
    我使用HEAP
    查詢時需要做什麼樣的改變嗎?!
    為何查詢時都會有錯呢?!
    程式碼如下:
    $m_link=uconnect_web("moofeec2_pub6400","mysql");
    mysql_query("SET NAMES 'utf8'");
    mysql_query("SET CHARACTER_SET_CLIENT=utf8");
    mysql_query("SET CHARACTER_SET_RESULTS=utf8");
    mysql_query("CREATE HEAP TEST5(NAME1 CHAR(10) NULL,NAME2 CHAR(10) NULL)") ;
    for($m_i=0;$m_i<=2;$m_i++){
    mysql_query("INSERT INTO TEST5 (NAME1,NAME2) VALUE ('AAA".$m_i."','BBB".$m_i."')") ;
    }
    //到這都是新增資料表 下面是查詢
    $m_query = mysql_query("SELECT NAME1,NAME2 FROM TEST5");
    while($m_record=mysql_fetch_array($m_query)){
    echo $m_record[NAME1] ;
    echo $m_record[NAME2]."<BR>" ;
    }
    這樣是否有錯誤呢?!
    他都說會有錯
    錯都出來查詢那邊
    他給的行數的在
    while($m_record=mysql_fetch_array($m_query)){
    這行
    對了
    請問一下
    fillano大大
    請問一下您說的
    SELECT TEMPORARY TABLE tmpnav AS SELECT * FROM fundnav
    這個式查詢時的用法嗎?!
    可我是都不行
    我也有注意不能超過temporary table的限制
    只是最後一點有點看不懂
    真的不好意思
    麻煩各位大大了~
  • edited 十一月 2007
    阿,打錯了,應該是CREATE TEMPORARY TABLE,不是SELECT TEMPORARY TABLE。抱歉。

    他只能用在同一個查詢中,所以你必須一次把建立跟查詢一次送出。查詢方法應該就是普通的SELECT。
  • edited 十一月 2007
    另外,產生資料表的方法好像不對吧?

    另一個轉貼自mysql文件的示範:
    CREATE TABLE t (i INT) ENGINE = MEMORY;
    CREATE TABLE t (i INT) TYPE = HEAP;
  • edited 十一月 2007
    fillano大大~謝謝你的回覆
    我怎麼越來越搞混了= =
    如果說建立資料表和查詢需要一起
    那怎麼會有資料呢?!
    我也有去查資料
    他們的範例大多都是差不多的
    如下:
    CREATE TABLE friend (
    sn INT(4) NOT NULL AUTO_INCREMENT,
    realname CHAR(10),
    address CHAR(50),
    phone CHAR(15),
    PRIMARY KEY (sn)
    )TYPE=HEAP;
    CREATE TABLE new_friend SELECT * FROM old_friend
    這我就有很多問題了
    第一所建立的資料表friend
    要是想要查詢怎麼辦呢?!
    第二個建立的資料表示NEW_FRIEND怎麼和後面的所要查詢的
    資料表不一樣呢?!
    第三就是要是都可以查詢了
    那要如何列出他所查詢的資料呀?!
    像以前的查詢要列出資料都只需要
    $record = mysql_fetch_array(mysql_query(select))
    還有呀第二個所建立的資料表NEW_FRIEND
    都不需要指定他裡面的欄位或者是要設定成暫存的type=heap嗎?!
    很抱歉
    問了這麼多
    因為實在百思不解
    測試也測試了很多次
    怎麼就是不會有我想要的結果
    請原諒~~
    也再次謝謝大大!!
  • edited 十一月 2007
    你的需求是什麼?需要暫存的資料表做什麼事情?我自己通常會使用temporary table的時機,是為了根據多個欄位做計算及修改,然後把結果一次更新到一般的table。

    我用php跑的code,在我的機器上可以正常執行:
    mysql_connect("localhost","root","");
    mysql_select_db("test");
    $sql="CREATE TEMPORARY TABLE tmpnav TYPE=HEAP AS SELECT * FROM fundnav;";
    $sql1 = "SELECT * FROM tmpnav";
    $result=mysql_query($sql);
    $result=mysql_query($sql1);
    $data=mysql_fetch_assoc($result);
    print_r($data);
    echo mysql_error();
    mysql_close();
    

    在這一段程式跑完後,這個table應該就會消失。說明一下:
    CREATE TEMPORARY TABLE tmpnav TYPE=HEAP AS SELECT * FROM fundnav
    
    是根據後面select的結果集在記憶體內產生一個temporary table,名字叫做tmpnav。

    接下來,可以select/update等,根據需要修改。以下是我用phpmyadmin跑的例子:
    CREATE TEMPORARY TABLE tmpnav TYPE=HEAP AS SELECT * FROM fundnav;
    UPDATE tmpnav SET nav=2.33 WHERE fundid=1 AND navdate='2007-11-05';
    UPDATE fundnav, tmpnav SET fundnav.nav=tmpnav.nav WHERE fundnav.fundid=tmpnav.fundid AND fundnav.navdate=tmpnav.navdate;
    
    這樣是修改完再回存。(mysql4以後才支援這樣子的update語法)
Sign In or Register to comment.