我在我的db "id" int(11) NOT NULL AUTO_INCREMENT,
中有一列,並且我希望此表中的多行具有相同的id
值。所以當插入表格時,我想告訴它是否應該增加或者值仍然是痙攣。有沒有簡單的方法如何做到這一點?僅在需要時才使用自動增量
回答
上auto_increment MySQL的文件說,(高亮是我的):
沒有值的AUTO_INCREMENT列指定的,所以MySQL 自動分配序號。除非啓用了 NO_AUTO_VALUE_ON_ZERO SQL模式,否則您還可以明確地將 指定給該列以生成序列號。如果該列被聲明爲 NOT NULL,那麼也可以將NULL分配給該列以生成 序列號。 將任何其他值插入到一個 AUTO_INCREMENT列中時,該列將設置爲該值,並且將重置 序列,以便下一個自動生成的值 從最大列值開始依次跟隨。
這意味着,如果你在插入之前確定的AUTO_INCREMENT字段的當前最大和你明確地插入插入語句該值,那麼您可以在AUTO_INCREMENT的領域有重複的值。
那裏,你需要注意的幾件事情:
如果你能有平行插入到表中,那麼你可能要鎖定表的讀數,所以其他進程不會插入一個新的記錄觸發了該領域的增量。
您不能在auto_increment字段使用主/唯一索引約束。
另一種方法是爲auto_increment設置一個單獨的表,而不要在主表中使用auto_increment。如果你需要一個新的id,那麼只需要在auto_ncrement表中插入一條記錄即可得到遞增的id,並用它將記錄插入到主表中。否則,只需從主表中獲取id值並在插入中使用它。
謝謝,我使用了替代解決方案,看起來很好。 –
一個auto_increment
列確保其中的值是唯一!所以,你不能這樣做。
我會建議一個觸發器,結合所需的邏輯。
謝謝,你能展示一個觸發器的例子嗎? –
那麼,我不知道什麼是標準,所以沒有。 – sagi
對於MyISAM表,您可以在多列索引中的輔助列上指定AUTO_INCREMENT。在這種情況下,AUTO_INCREMENT列的生成值計算爲MAX(auto_increment_column)+ 1 WHERE prefix = given-prefix。當您想要將數據放入有序組時,這非常有用。
CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
) ENGINE=MyISAM;
INSERT INTO animals (grp,name) VALUES
('mammal','dog'),('mammal','cat'),
('bird','penguin'),('fish','lax'),('mammal','whale'),
('bird','ostrich');
SELECT * FROM animals ORDER BY grp,id;
Which returns:
**grep id name**
fish 1 lax
mammal 1 dog
mammal 2 cat
mammal 3 whale
bird 1 penguin
bird 2 ostrich
如果AUTO_INCREMENT列是多個索引的一部分,MySQL的使用隨AUTO_INCREMENT列開始,如果有一個索引生成的序列值。例如,如果動物表包含索引PRIMARY KEY(grp,id)和INDEX(id),則MySQL將忽略用於生成序列值的PRIMARY KEY。其結果是,該表將包含一個序列,每GRP值不是一個序列
- 1. Amazon RDS - 僅在需要時纔在線?
- 2. 僅在需要時才編譯代碼
- 3. 僅在需要時才顯示Janrain/RPX
- 4. 僅在需要時才使用科學記數法
- 5. 使用自動增量與MySQL和需要檢索該號碼
- 6. 如何僅在需要時才能看到水平滾動條?
- 7. 僅在需要時
- 8. 僅當需要時才使用Java SMTP認證
- 9. 如何使JasperReports組僅在需要時纔在新頁面上啓動?
- 10. 如何僅在需要時使用RequireJS
- 11. 僅在需要時纔要求facebook權限
- 12. JavaScript,僅在需要時才加載組件/調用方法
- 13. 僅在某些方法調用時才需要依賴關係
- 14. 僅當元素需要滾動時才添加一個類
- 15. 僅在導出結構時重置自動增量
- 16. 如何使一個字段僅在使用另一個字段時才需要
- 17. 只有在導軌3.2需要時才自動加載寶石?
- 18. 僅當用戶需要時才應用緩存?
- 19. 要在MySQL中使用自動增量嗎?
- 20. 如何僅在需要時自動更新Django頁面?
- 21. Python:僅在沒有使用其他參數時才需要參數
- 22. 如何使自動增量列非自動增量?
- 23. 僅當用戶需要時才顯示Firebase通知
- 24. 僅在設置了其他屬性時才需要屬性
- 25. 僅在需要時才創建Java對象?
- 26. Flexslider lazyloading - 僅在真正需要時才加載圖像
- 27. 僅在需要時才從formset顯示django fom
- 28. 僅當文件存在時才需要文件
- 29. 僅在加載骨幹視圖時才需要依賴關係
- 30. 僅在R包中需要時才加載包裝
不應該是'\'id \'int(11)NOT NULL AUTO_INCREMENT,'? –
當它是'id'時,它應該是唯一的,不是嗎? –
是的,我很抱歉錯誤的語法,但在這裏並不重要。好吧,我可以更改ID列的名稱,但問題的想法仍然一樣,不是嗎? :-)另一件事是,只有@sagi在答案中說的auto_increment只能用於唯一值。 –