2011-10-05 53 views
-2

我做了一個名爲'uid'的列,它是一個主鍵但不是自動增量的mysql表。這是因爲我使用的是一個php rand(00000000,99999999)或其他什麼來填充'uid'。它工作了一段時間,直到我試圖刪除表中的行。它們不會在phpmyadmin中刪除,除非我檢查它們並使用底部的刪除X.與記錄位於同一行的X不會執行任何操作。所以......當我最終刪除了它們時,我嘗試從我的php腳本中插入更多的INSERT,現在,即使插入的隨機數字不同,uid也與之前相同。所以,我認爲「嗯,我想我不需要讓uid主鍵」,所以我刪除了它,並且我只有一個名爲uid的普通列。但問題依然存在。我試圖刷新MySQL表。我試圖放棄桌子並重新創建它無濟於事。任何想法都會非常有幫助。謝謝。mysql表中的主鍵值總是相同的

下面是表(有一些列刪除)

CREATE TABLE `members` ( 
`uid` int(13) NOT NULL, 
`emailAddress` varchar(150) NOT NULL, 
`emailAddressVerified` tinyint(1) NOT NULL default '0', 
`agreesToTerms` varchar(5) NOT NULL, 
`timestampJoined` timestamp NOT NULL default CURRENT_TIMESTAMP, 
    PRIMARY KEY (`uid`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
+2

歡迎計算器,你知道有你的關鍵字的關鍵?它在空間鍵附近。 – Johan

+1

爲什麼你會用php來生成一個僞隨機數而不是依靠mysql的自動增量? – dan360

+0

我需要所有的uid長度相同,因爲它們將顯示在url中:例如,「.../profile/2379218」 – celwell

回答

2

使用的主鍵爲自動增量。當一行被刪除時,該鍵將不會再被使用。

2

你似乎對一些事情感到困惑。所有的phpMyAdmin都會隱藏實際SQL命令的細節。要刪除你使用DELETE FROM TABLE WHERE的行...

這與將列聲明爲主鍵無關。然而,它將使用主鍵進行單列刪除。

你沒有說爲什麼你是一個UID,但是當你有一個主鍵,有2件發生的事情:

  1. 獨特
  2. 唯一索引創建
  3. 主鍵保證

至於使用rand()作爲生成uid的基礎,這不是一個好主意,因爲總是有機會得到重複的id。畢竟,它是隨機的。然而,php有一個你可以使用的函數:uniqid()。根據參數,您可以獲得13個字符或23個字符的返回值。

我不確定當前問題的解釋是什麼,但我們需要知道表格的結構。在sql表中得到這個的一種方法是從phpmyadmin sql表單發佈:

show create table yourtablename 
+0

我已經發布了下面的結果(以便我可以正確格式化)。 – celwell

+0

嗯...我解決了這個問題,它仍然卡在自動增量。下面的代碼片段實際上是在我刪除了導致原始問題的東西之後。我離開了它,因爲它似乎有同樣的問題。真的,我切換到uniqid()後出現了一個不同的問題。第一個問題的解決方案:執行「show create table tablname」,然後從底部移除AUTO_INCREMENT事物(如果它還有它,則使用主鍵形成行)。然後刪除表並運行查詢。我認爲,即使我在phpmyadmin中刪除了該屬性,mysql仍然保持自動增量。 – celwell

1

爲什麼不使用自動增量?

CREATE TABLE animals (
    id MEDIUMINT NOT NULL AUTO_INCREMENT, 
    name CHAR(30) NOT NULL, 
    PRIMARY KEY (id) 
) ENGINE=MyISAM 

或者更糟的方法是「對重複鍵」:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; 
+0

'INSERT INTO table(a,b,c)VALUES(1,2,3)ON DUPLICATE KEY UPDATE c = c + 1;'不要使用它,速度很慢,你會遇到併發問題。 – Johan