2010-04-13 458 views
3

我試圖爲僞數組變量創建一個表。這看起來像從mysql查詢中獲取當前會話/進程ID

CREATE TABLE IF NOT EXISTS `MyArray`.`ArrayTable` (
    `ID` INT UNSIGNED NOT NULL COMMENT 'Hash value of SessionID + ArrayName' , 
    `SessionID` INT UNSIGNED NOT NULL , 
    `ArrayName` CHAR(26) NOT NULL 
      COMMENT '32 digit char - 6 digit longest process id (assumtion)' , 
    `Index` INT UNSIGNED NOT NULL , 
    `Value` TEXT NOT NULL , 
    PRIMARY KEY (`ID`, `SessionID`)) 
ENGINE = MyISAM; 

表尚未正常化,「希望這將使其更簡單一點理解:)

爲了避免客戶之間collission,應該有客戶端會話之間的區別。出於這個原因,我認爲需要知道當前會話/進程ID(就像「SHOW PROCESSLIST」),但真的需要知道在哪個進程查詢?

+0

你有沒有其他識別信息可以使用?客戶的IP,用戶名等,實際上是識別客戶端,而不是一些僞隨機性?會話/進程ID可能會隨着時間的推移重複 – lexu 2010-04-13 05:25:27

+0

從一個客戶端IP和一個用戶名可能會創建許多連接到服務器,所以我不會的事情它會工作。但是,是的,你正在指出我錯過的一些內容,「會話/進程ID可能會隨着時間的推移而重複」。現在我正在考慮將創建時間添加爲變量。 – 2010-04-14 04:06:35

+0

順便說一下,mysqld重新啓動後,線程ID將被重置。只要服務器正在運行,這些ID就不會被重用。 – newtover 2010-04-14 04:27:14

回答

14

您可以使用connection_id()函數。

+0

這是我真正需要的,非常感謝你。 – 2010-04-14 04:08:50