2012-07-16 77 views
0

簡單就像它自己。我想要一個自動增量字段,但有時我必須在一些必須手動設置的字段中重複使用id。我可以在AUTOINCREMENT字段中插入數據嗎?

是否有任何問題,這樣做與自動增量字段在MySQL中使用PHP? (一致性,...)

+4

這氣味不好的數據庫設計 – 2012-07-16 11:22:42

+0

這不是該表的主鍵。 – 2012-07-16 11:24:33

+1

你不能在mysql中有一個(自動)自動增量字段,它不是主鍵 – AD7six 2012-07-16 11:33:32

回答

1
  1. 您可以手動設置自動增量領域,該指數將繼續從數量上計數(除非這個ID是比目前的AI指數較小)
  2. 自動增量領域是獨一無二的所以你可以選擇設置AI場手動
  3. 一般自增字段不應該手動設置時要非常小心。如果你發佈你的使用情況,也許我們可以幫助您制定出一個更好的解決方案
+0

自動增量領域是獨一無二的 - >完美謝謝:) – 2012-07-16 11:25:03

+0

我只是想節省時間檢查插入之前的那場最大的ID,但我想我會必須做吧 – 2012-07-16 11:27:50

+1

你可以使用PHP的uniqid生成的ID [HTTP:/ /php.net/manual/de/function.uniqid.php]這將節省你一個選擇,如果沒有關係,是否ID是連續的... – Horen 2012-07-16 11:31:18

0

考慮使用複合主鍵(2列或多列創建主鍵)。一列可以是自動增量,另一列可以是「重複的ID」。無論哪種方式,這確保每一行都有一個唯一的密鑰。

+0

這不是主鍵,但謝謝:D – 2012-07-16 11:27:17

1

根據你的php結構,你可以更換:

INSERT INTO table_name (name, incr) 
VALUES ('hello', {$incr}) # using retrieved data 

INSERT INTO table_name (name, incr) 
SELECT 'hello', incr 
FROM ( SELECT (incr + 1) AS incr 
     FROM table_name 
     ORDER BY incr DESC 
     UNION 
     SELECT 1) AS h 
LIMIT 1 

Basicly它只是檢查最高incr值在你的表,或給它1開始。這隻需要一個MySQL調用,並且會加快速度。

相關問題