2010-02-13 77 views
3

我正在構建一個使用MySQL作爲存儲的電子表格應用程序,我需要確定正在更新客戶端的記錄以保存更改。MySQL:有沒有像MySQL表中每個記錄的內部記錄標識符?

有沒有一種方法,比如某種「內部記錄標識符」的(內部爲數據庫引擎本身使用),唯一地標識記錄,這樣我就可以更新正確的?

當然,一個SELECT查詢,可以用來識別記錄,包括在表中的所有領域,但顯然已在大多數情況下返回多個記錄的缺點。

重要提示:電子表格應用程序的目標是在任何表格上工作,甚至沒有任何鍵的設計極其糟糕,所以諸如「定義帶有UNIQUE索引的字段並使用該字段的解決方案」等解決方案不是一種選擇,表格結構可能是非常可變的,並不重要。

非常感謝。

回答

1

AFAIK不存在這種唯一的內部標識符(比如簡單的行ID)。

可以也許能夠運行SELECT沒有任何的排序,然後得到使用LIMIT的第n行。在可靠和安全的使用條件下,mySQL Guru需要確認。它可能永遠不會。

嘗試用phpMyAdmin,網絡前端到MySQL玩耍。它旨在處理沒有按鍵的設計糟糕的桌子。如果我沒有記錯,它使用所有列可以得到在這種情況下保持:

UPDATE xyz set a = b WHERE 'fieldname' = 'value' 
         AND 'fieldname2' = 'value2' 
         AND 'fieldname3' = 'value3' 
         LIMIT 0,1; 

等。

當然,這也不完全重複安全。

這使我心中唯一的想法是在運行時添加一個鍵列,而當您的應用程序進行刪除它。這是一個誘人的想法,但也許比沒有好。

+0

我相信phpMyAdmin還會在DELETE和UPDATE子句中添加一個LIMIT 1,其中沒有主鍵可用。 – 2010-02-13 15:56:02

+0

@Adam True。我將它添加到示例中。只要phpMyAdmin是訪問數據庫的唯一實例,這可能是安全的。 – 2010-02-13 15:57:56

+0

乾杯。這正是我目前所採用的解決方案,絕對不是重複安全的。 哇,我感覺到鵝疙瘩。後來實際上是一個聰明的想法,事實上,雖然我承擔了任務,但我不能改變桌子的結構。這將不得不在一個全新的臨時表中播放。 謝謝。 – Webmaster 2010-02-13 16:04:39

0

MySQL有「自增」數字列,您可以添加,甚至定義爲一個主鍵,這將讓你通過數據庫自動生成一個唯一的記錄ID。您可以查詢您只需插入select LAST_INSERT_ID()

例如從MySQL的官方文檔here

+0

好主意,有它,不符合規格:不控制表結構,不能添加字段,鍵。 – Webmaster 2010-02-13 15:59:11

0

據我所知,過去的記錄id,MySQL的缺乏所看到Oracle中的隱含ROWID功能(和其他引擎存在與自己的語法)。您必須創建您自己的AUTO_INCREMENT field

+0

不符合規格:無法控制表結構,不能添加字段,鍵。 您提到的ROWID功能可能是我想說的。謝謝。 – Webmaster 2010-02-13 16:00:35